19.解释器
意图:应用或对象与用户狡猾时,采取最具实效性的方式完成
适用场合:1)针对对象的操作有规律可循;2)在执行过程中,对效率要求不高,但对灵活性要求很高
20.迭代
意图:提供一种方法, 来顺序访问集合中的所有元素
适用场合:1)访问一个聚合对象的内容,而不必暴露其内部实现;2)支持对聚合对象的多种遍历方式;3)为遍历不同的聚
合对象提供一致的接口
21.中介者
意图:避免大量对象之间的紧耦合
适用场合:1)有大量对象彼此依赖(M:N);2)某个类型要依赖于很多其他类型
22.备忘录
意图:希望备份或者恢复复杂对象的部分属性
适用场合:1)对象的属性比较多,但需要备份恢复的属性比较少;2)对象的状态是支持恢复的
23.状态
意图:管理对象的多个状态
适用场合:1)对象的行为依赖于当前状态;2)业务处理过程存在多个分支,而且分支会越来越多
上面是对GoF23中模式的快速回顾,其中的理解未必很深刻很到位。对设计模式的学习是没有止境的,而且它也只是面向对
象分析与设计的冰山一偶。
设计模式之创建型模式
GoF的设计模式一共23个,可以分为3大类:创建型、结构型和行为型,这篇文章主要讨论创建型。
创建型的设计模式包括:简单工厂(Simple Factory)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、单例
(Singleton)、构造者(Builder)和原型(Prototype),我们分别来讨论。
我们首先来看工厂系列的3个设计模式,它们都主要是针对软件设计中的“开放-封闭”原则, 即程序应该对扩展开放,对修改封
闭。特别是当我们的程序采用XML+反射的方式来创建对象时,工厂模式的威力就完全展现出来了,这时我们可以通过维护配
置 文件的方式,来控制程序的逻辑。
1)简单工厂,当我们的程序在实例化对象时,如果输入条件不一样,产生的对象也不一样,那么我们可以考虑使用简单工厂
对不同的实例进行统一封装, UML结构如下:
优点:封装了具体对象的实例化过程,Client端和具体对象解耦,同时ProductManager可以作成静态类或者Singleton对象,
然后可以使用HashMap缓存具体对象(前提是对象没有时间依赖性),降低创建对象的次数。
缺点:当增添一种新类型的对象时,需要修改Productmanager的代码(如果不采用XML)
2)工厂方法,它是针对简单工厂的改进版,添加了对ProductManager的抽象,UML结构如下:
优点:结构更加灵活,对于某种类型的对象来说,会有一个特定的对象工厂指向它,这样当我们需要添加一种新类型的产品
时,只需要添加两个类,一个是具体产品类,一个是新产品的工厂类。这样更加灵活。