5.3 Design Patterns for Reuse面向复用的设计模式
1.结构型模式
**Adapter模式
利用包装使类和不兼容接口一起工作
**Decorator模式
动态添加或重写已存在对象的行为
**Facade模式
提供大体积代码的简化的接口
1. 行为类模式
**Strategy模式
允许一家族的算法在运行时被选择
**Template method
把算法骨架定义为抽象类,允许它的子类提供具体的行为
** Iterator模式
不用暴露对象的对类进行遍历
除了类本身,设计模式更强调多个类/对象之间的关系和交互过程
---比接口/类复用的粒度更大
Creational patterns 创建型模式
Structural patterns 结构型模式
Behavioral patterns 行为类模式
1 Structural patterns 结构型模式
(1) Adapter适配器模式
将某个类/接口转换为client 期望的其他形式
通过增加一个接口,将已存在的子类封装起来, client 面向接口编程,从而隐藏了具体子类
将老的组件用于新的系统,也称包装(wrapper)
Ex:
(2) Decorator装饰器模式
问题来源:用每个子类实现不同的特性,如果需要特性的任意组合呢?
为对象增加不同侧面的特性,对每一个特性构造子类,通过委派机制增加到对象上
Decorator与继承Inheritance相比:
1.前者在运行时组成特性。 继承在编译阶段添加特性
2.Decorator由多种包装类组成。而继承就是一个子类
3.Decorator可以随意组合特性,随意添加。而多继承很难
集合类里的一些decorator
(3) Facade 外观模式
客户端需要通过一个简化的接口来访问复杂系统内的功能
提供一个统一的接口来取代一系列小接口调用,相当于对复杂系统做了一个封装,简化客户端使用,便于客户端学习使用,解耦
例子:
2 Behavioral patterns行为类模式
(1) Strategy策略模式
有多种不同的算法来实现同一个任务,但需要 client 根据需要 动态切换算法,而不是写死在代码里
为不同的实现算法构造抽象接口,利用 delegation ,运行时动态传入 client 倾向的算法类实例
(2) Template Method 模板模式
做事情的步骤一样,但具体方法不同
共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现
使用继承和重写实现模板模式
模板模式在 框架Framework中使用很多
在白盒框架中使用
(3) Iterator
客户端希望遍历被放入容器 / 集合类的一组 ADT 对象,无需关心容器的具体类型
也就是说,不管对象被放进哪里,都应该提供同样的遍历方式
办法:A strategy pattern for iteration
模式结构: