HIT 软件构造 面向复用的设计模式

设计模式

除了类本身,设计模式更强调多个类/对象之间的关系和交互过程—比接口/类复用的粒度更大
分为创建型模式、结构型模式、行为类模式

结构型模式

adapter(适配器模式)

什么时候使用

将某个类/接口转换为client期望的其他形式
同故宫增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类

模型结构

其实它的本质就是使用一个中间的类,将原来的方法隔离,为原来的方法重新定义接口,并提供给client使用
HIT 软件构造 面向复用的设计模式

decorator(装饰器模式)

什么时候使用

为对象增加不同侧面的特性
对每一个特性构造子类,通过委派机制增加到对象上
同时使用了子类型和委托机制

模型结构

decorator中有一个rep,用来维护当前的component,你需要用什么的时候,用相应的子类包装一下就可以了,注意component不可能同时拥有这些特性,仅仅是在你需要的时候,动态的获取
HIT 软件构造 面向复用的设计模式

facade(外观模式)

什么时候使用

客户端需要通过一个简化的接口来访问复杂系统内的功能

模型结构

将n个操作组合起来,然后呈现给client
HIT 软件构造 面向复用的设计模式

行为类模式

策略模式(strategy pattern)

什么时候使用

有多种不同的算法来实现同一个任务,但需要client根据需要动态切换算法,而不是写死在代码里

模型结构

为不同实现设计一个接口,在client使用时进行delegation调用
HIT 软件构造 面向复用的设计模式

template method(模板模式)

什么时候使用

做事情的步骤一样,但具体方法不同
共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现
使用继承和重写实现模板模式

模型结构

父类中有一个模板方法
HIT 软件构造 面向复用的设计模式

iterator(迭代器模式)

什么时候使用

client希望遍历被放入容器/集合类的一组ADT对象,无需关心容器的具体类型
不管对象被放进哪里,都应该提供同样的遍历方式

实现方法

直接实现Java内置iterable和iterator接口
HIT 软件构造 面向复用的设计模式