创建型模式
1.工厂方法
也称作虚拟构造器,用于定义一个用于创建对象的接口,让其子类来决定实例化哪个类,从而使一个类的实例化延迟到其子类。
静态工厂方法即可以在ADT中实现,也可以构造单独的工厂类。
工厂方法的选择
左右两棵树的子类型一一对应。如果在工厂方法里使用type表征右侧的子类型,那么左侧的子类型只要1个即可。
结构型模式
- 适配器adaptor模式
将某个类/接口转换为client期望的其他形式。通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体的子类。
适配器模式选择
- 装饰器模式 decorator
对每个特性构造子类,通过委派机制增加到对象上。使用了子类行和委派。
行为型模式
-
策略模式
有多种不同算法来实现同一个任务,但需要client根据需要动态切换算法;为不同的实现算法构造抽象类,利用委托,运行时动态传入client倾向的算法类实例。
根据需要切换不同的方法实现。
策略模式选择
-
模板模式
做事情的步骤一样,但具体的方法不同,共性的步骤在抽象类内公共实现,差异步骤在各个子类中实现。
使用继承和重写来实现。 -
迭代模式
客户端希望遍历被放入容器或集合类的一组ADT对象,无需关系容器的具体类型,也就是说,不管对象被放进哪里,都应该提供相同的遍历方式。
让自己的集合类实现Iterable接口,并实现自己的独特Iterator迭代器,允许客户端利用这个迭代器进行显示或隐式的迭代遍历。
-
visitor 模式
设计模式的对比
1.共性样式:只使用继承,不实用委托。OCP,DIP。
Adaptor
使用场合:你已经有了一个类,但其方法与目前client的需求不一致,根据OCP原则,不能改这个类,所以扩展一个adaptor和一个统一的接口。
Template
适用:有共性的算法流程,但算法个步骤有不同的实现,将共性提升之父类,个性保留在子类。
2. 共性样式
Strategy
想有多个算法的实现,要在右侧树中扩展子类行,在左侧子类行中传入不同的类型实例。
Iterator
左右两棵树,其实分别只有一个子类行