【软件构造】第六章第二节 可维护的设计模式

第六章第二节 可维护的设计模式

Outline

  • 创造性模式:Creational patterns
    • 工厂模式(Factory Pattern)
    • 抽象工厂模式(Abstract Factory Pattern)
    • 建造者模式(Builder Pattern)
  • 结构化模式:Structural patterns
    • 桥接模式(Bridge Pattern)
    • 代理模式(Proxy Pattern)
    • 组合模式(Composite Pattern)
  • 行为化模式:Behavioral patterns
    • 中介者模式(Mediator Pattern)
    • 观察者模式(Observer Pattern)
    • 访问者模式(Visitor Pattern)
    • 责任链模式(Chain of Responsibility Pattern)
    • 命令模式(Command Pattern)

Notes:

## 创造性模式:Creational patterns

 【工厂模式(Factory Pattern)】html

  • 定义:工厂方法模式也被称为虚拟构造器。当client不知道要建立哪一个具体类的实例,或者不想在client代码中指明要具体建立的实例时,用工厂方法。
  • 意图:定义一个用于建立对象的接口,让其子类来决定实例化哪个类,从而使一个类的实例化延迟到其子类。
  • 主要解决:主要解决接口选择的问题。
  • 应用实例: 您须要一辆汽车,能够直接从工厂里面提货,而不用去管这辆汽车是怎么作出来的,以及这个汽车里面的具体实现。
  • 优势:
    • 一个调用者想建立一个对象,只要知道其名称就能够了。
    • 扩展性高,若是想增长一个产品,只要扩展一个工厂类就能够。
    • 屏蔽产品的具体实现,调用者只关心产品的接口。
  • 缺点:每次增长一个产品时,都须要增长一个具体类和对象实现工厂,使得系统中类的个数成倍增长,在必定程度上增长了系统的复杂度,同时也增长了系统具体类的依赖。这并非什么好事。
  • 知足OCP(Open-Closed Principle):—对扩展的开放,对修改已有代码的封闭
  • 模式:

  • 例子:

 非静态方法:算法

静态方法:设计模式

 

【抽象工厂模式(Abstract Factory)】ide

  • 定义:抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂建立其余工厂。该超级工厂又称为其余工厂的工厂。
  • 在抽象工厂模式中,接口是负责建立一个相关对象的工厂,不须要显式指定它们的类。每一个生成的工厂都能按照工厂模式提供对象。
  • 方法:提供接口以建立一组相关/相互依赖的对象,但不须要指明其具体类。
  • 用途:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品时使用。例:①当一个UI,包含多个窗口控件,这些控件在不一样的OS中实现不一样。②当一个仓库类,要控制多个设备,这些设备的制造商各有不一样,控制接口有差别
  • 优势:当一个产品族中的多个对象被设计成一块儿工做时,它能保证客户端始终只使用同一个产品族中的对象。
  • 缺点:产品族扩展很是困难,要增长一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。
  • 使用场景: 一、QQ 换皮肤,一整套一块儿换。 二、生成不一样操做系统的程序。
  • 如下面窗口滚动条为例:

  客户端想要一个产品,由窗口和滚动条组成。因而能够交给一个抽象工厂来作,这个工厂负责将产品的组件组装起来成一个完整的产品。不一样的产品继承这个抽象工厂接口,实现本身的工厂方法。ui

  下面是具体的实现spa

  抽象工厂类型建立的不是一个完整产品,而是“产品族”(遵循 固定搭配规则的多类产品的实例),获得的结果是:多个不一样产品的 object,各产品建立过程对client可见,但“搭配”不能改变。操作系统

  本质上,Abstract Factory是把多类产品的factory method组合在一块儿。设计

 

【建造者模式(Builder Pattern)】代理

  • 定义:建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。该 Builder 类是独立于其余对象的。
  • 方法:建立复杂对象,包含多个组成部分
  • 意图:将一个复杂的构建与其表示相分离,使得一样的构建过程能够建立不一样的表示。
  • 关键代码:建造者:建立和提供实例,导演:管理建造出来的实例的依赖关系。
  • 应用实例: 一、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是常常变化的,生成出所谓的"套餐"。 二、JAVA 中的 StringBuilder。 
  • 优势: 一、建造者独立,易扩展。 二、便于控制细节风险。
  • 缺点: 一、产品必须有共同点,范围有限制。 二、如内部变化复杂,会有不少的建造类。
  • 模式图:

 

  • 例子: 咱们须要一个Pizza的产品,该Pizza产品的part是以三个属性的形式体现,其builder就至关于给三个属性赋值(也可更复杂)。

 

比较:工厂抽象模式(Factory method)和构造器模式(Builder method)

  Abstract Factory建立的不是一个完整产品,而是“产品族”(遵循固定搭配规则的多类产品实例),获得的结果是:多个不一样产品的实例object,各产品建立过程对client可见,但“搭配”不能改变。server

  Builder Factory建立的是一个完整的产品,有多个部分组成,client不需了解每一个部分是怎么建立、各个部分怎么组合,最终获得一个产品的完整 object 。

比较:模板方法模式(Template method)和构造器模式(Builder method)

  • Template Method:a behavioral pattern 目标是为了复用算法的公共结构(次序)。
    • 定义了一个操做中算法的骨架(steps),而将具体步骤的实现延迟到子类中, 从而复用算法的结构并可从新定义算法某些特定步骤的实现逻辑。
    • 复用算法骨架,强调步骤的次序
    • 子类override算法步骤
  • Builder Factory:a creationalpattern 目标是“建立复杂对象”,灵活扩展
    • 将一个复杂对象的构造方法与对象内部的具体表示分离出来,一样的构造方法能够创建不一样的表现。
    • 不强调复杂对象内部各部分的“次序”
    • 子类override复杂对象内部各部分的“建立”
    • 适应变化:经过派生新的builder来构造新的对象(即新的内部表示),OCP

 

## 结构化模式:Structual patterns

【桥接模式(Bridge Pattern)】

【代理模式(Proxy Pattern)】

【组合模式(Composite Pattern)】

 

## 行为化模式:Behavioral patterns

【中介者模式(Mediator Pattern)】

【观察者模式(Observer Pattern)】

【访问者模式(Visitor Pattern)】

【责任链模式(Chain of Responsibility Pattern)】

【命令模式(Command Pattern)】

相关文章
相关标签/搜索