5.3 Design Patterns for Reuse面向复用的设计模式

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

 

模式结构:

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_42766619/article/details/91384558