设计模式小结
装饰器(decorater)模式
装饰器模式是为应对子类拥有不同特性集合,为提高复用性为设计的模式。其可简单理解为穿衣服,我们将每个特性做成衣服,几件套在一起就满足了子类对特性的要求。
装饰器模式delegation结构如下:
类的介绍
- iterface IStack():其余所有类的父类
- class Stack implements IStack():实现子类中的公有方法
- class StackDecorater impiements IStack():在其构造方法delegation一个Stack,用以实现通用方法。
- class UndoDecorater extends StackDecorater impiements IStack():实现某一种特性,其中构造方法中delegation一个IStack,用来接收其他特性。
注:此模式构造出的子类如果以父类型接受,则只能调用父类型的方法。可以在父类型中定义子类中的特殊方法,但在Stack中不予以实现。
状态模式
当包含状态转换关系时,将状态功能delegation到外部,这样添加新状态时不需要更改已有代码
注:在具体的状态子类ConcreteStateA中,可实现唯一的状态
static ConcreteStateA a instance=new ConcreteStateA();
调用此状态时用ConcreteStateA.instance;
备忘录模式(Memento)
此模式用来实现ctrl+z(回滚)的功能
类的介绍
- Caretaker:维持一个Mementod类的list,并实现addMemento和getMemento(int i)功能
- Originator:维持state,并实现由当前state创建新Mementod,及更改当前状态的功能
- Mementod:保存一个状态
Visitor
(18,19都考过)
visitor模式为已完成的类提供,在不改变已有代码的前提下,通过新建类的方式,为已有类添加新功能
注:具体实现通过在已有类中留下此方法,利用双向deligation完成功能
public Object accept(Visitor v){
return v.visitor(this);
}
(静态)工厂方法
当client不知道要创建哪个类的具体实现,或不想client代码中不想指明创建实例的类名,用静态工厂方法。
备忘录模式
Proxy
Proxy模式是为了应对当某接口的实现类不想直接给用户时使用时,我们新建一个接口的实例,并delegation到RealSubject
适配器(Adapter)
与Proxy形式类似,当某个已实现类不适用于当前输入时,我们将此类封装,拥有适合输入的参数,并在内部delegation
策略模式(Strategy)
策略模式用来为客户端提供多种选择,将选择策略delegation到外部接口,然后由客户端创建需要的子类并作为参数传入
当然,如果想避免类的名字暴露,可以采用静态工厂的方法。
模板模式(Template)
此模式是为了实现固定一系列方法的调用顺序。
模板模式与前几个不同之处在于,它与delegation无关,只是单纯的继承关系。一个抽象类与多种实现类。