软件设计模式

模式和软件模式

A pattern is a solution to a problem in a context.

模式 起源于建筑学,每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式我们可以无数次的重用那些已有的解决方案,无需再重复相同的工作。

软件模式 (Software Patterns) 是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思路或参照样板。软件模式并非仅限于设计模式,它还包括架构模式、分析模式和过程模式等,实际上,在软件开发生命周期的每一个阶段都存在着一些被认同的模式。

在这里主要讨论的是软件设计模式。

软件架构模式与软件设计模式的比较

简略的来说,架构模式是整体上的大智慧,而软件模式更侧重于小技巧。

这里以 MVC 解决方案为例。

软件架构模式

软件设计模式

所谓软件设计模式:

  • 在软件模式中,设计模式是研究最为深入的分支。
  • 设计模式用于在特定的条件下为一些重复出现的软件设计问题提供合理的、有效的解决方案。
  • 是系统地命名、解释和评价某一个重要的可重现的面向对象的设计方案。
  • 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

软件设计模式包含几个基本要素:模式名称、问题、解决方案、后果。

一个好的模式必须做到以下几点:

  • 解决一个问题:从模式可以得到解,而不仅仅是抽象的原则或策略。
  • 是一个被证明了的概念:模式通过—个记录得到解.而不是通过理论或推测。
  • 解并不是显然的:许多解决问题的方法(例如软件设计范例或方法)是从最基本的原理得到解;而最好的方法是以非直接的方式得到解,对大多数比较困难的设计问题来说,这是必要的。
  • 描述了一种关系:模式并不仅仅描述模块,它给出更深层的系统结构和机理。
  • 模式有重要的人为因素:所有的软件服务于人类的舒适或生活质量,而最好的模式追求它的实用性和美学。

软件设计模式分类

软件设计模式 按照不同的分类标准可以分为不同的类别,例如按 目的 可以分为 创建型结构型行为型,按 范围 可以分为 对象

创建型设计模式

创建型模式 (Creational Pattern) 对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。

创建型模式在创建什么 (What),由谁创建 (Who),何时创建 (When) 等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。

创建型设计模式包含:

  • 简单工厂模式
  • 工厂模式
  • 抽象工厂模式
  • 建造者模式
  • 原型模式
  • 单例模式

结构型设计模式

结构型模式(Structural Pattern) 关注如何将现有类或对象组织在一起形成更加强大的结构,不同的结构型模式从不同的角度组合类或对象,它们在尽可能满足各种面向对象设计原则的同时为类或对象的组合提供一系列巧妙的解决方案。

其中,类结构型模式关心类的组合,由多个类组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系;对象结构型模式关心类与对象的组合,通过关联关系,在一个类中定义另一个类的实例对象,然后通过该对象调用相应的方法。

模式名称 定义
适配器模式
(Adapter Pattern)
将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。
桥接模式
(Bridge Pattern)
将抽象部分与它的实现部分解耦,使得两者都能够独立变化。
组合模式
(Composite Pattern)
组合多个对象形成树形结构,以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。
装饰模式
(Decorator Pattern)
动态地给一个对象增加一些额外的职责。就扩展功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案。
外观模式
(Facade Pattern)
为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
享元模式
(Flyweight Pattern)
运用共享技术有效地支持大量细粒度对象的复用。
代理模式
(Proxy Pattern)
给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。

行为型设计模式

行为型模式(Behavioral Pattern) 描述类或对象如何交互及如何分配职责,它主要涉及通过合理的处理方法,达到使系统升级性和维护性提高的目的。

分为:

  • 解释器模式 (Interpreter Pattern)
  • 模板方法模式 (Template Method Pattern)
  • 职责链模式 (Chain of Responsibility Pattern)
  • 命令模式 (Command Pattern)
  • 迭代器模式 (Iterator Pattern)
  • 中介者模式 (Mediator Pattern)
  • 备忘录模式 (Memento Pattern)
  • 观察者模式 (Observer Pattern)
  • 状态模式 (State Pattern)
  • 策略模式 (Strategy Pattern)
  • 访问者模式 (Visitor Pattern)

由于各设计模式都可以展开去讨论,而此处列举的设计模式众多,故在此不对每个设计模式进行展开讨论,有时间或有需求再单独对某一设计模式进行讨论。

参考:我校教参