Software Construction之Design Pattern

 

Creational patterns

工厂方法模式(Factory Method pattern)

抽象工厂模式(Abstract Factory)

抽象工厂模式和工厂方法模式的区别在于,抽象工厂模式的工厂会创造一个产品的多个组件,而工厂方法模式直接创造一个产品。

构造器模式(Builder)

Builder抽象类的子类直接build一种产品。

Structural patterns

适配器模式(Adapter)

封装为Client方便的形式。

装饰器模式(Decorator)

将类和类之间嵌套起来,使得到的类包含有之前类的属性和自己的属性。

外观模式(Facade)

也是为了Client的方便来封装。
与Adapter模式不同的是,Facade是将一些过程封装为一个过程,而Adapter是将参数封装。

桥接模式(Bridge)

通过委派和继承来实现复杂操作。

代理模式(Proxy)

为了隔离Client的访问,设置一个代理。

组合模式(Composite)

类似于装饰器模式,区别在于每个类内部可以有多个其他类的实例而不是只有一个。

Behavioral patterns

策略模式(Strategy)

对于策略进行抽象,抽象为Strategy类/接口,然后Strategy中有一个work函数,在子类中实现这个work函数。
这样只需要切换传入的Strategy是哪个子类就可以了。

模板模式(Template Method)

当做事情的步骤一样,但具体方法不同。
具体来说是,当某个过程work都是由step1(),step2(),step3()这种顺序执行,即

public void work(){
    step1();
    step2();
    step3();
}

但是step1(),step2()可能对于不同的事情具体操作不同,要写成不同的类。
那么可以在抽象类/接口中实现work()如上,并定义函数step1(),step2()…,然后在继承这个类的不同的类中Override这些step()方法。

迭代器模式(Iterator)

对于遍历ADT中的元素,使用Iterator来遍历,不用用户自己去决定怎么遍历。

Iterator iterator = adt.iterator();
    while (iterator.hasNext()) {
      Integer item = (Integer) iterator.next();
    }

观察者模式(Observer)

有一个被观察者A和很多观察者B1,B2,…。
Bi先到A那里注册,当A有事件要发布时,A会更新所有观察者的状态。

访问者模式(Visitor)

以类与类的交互形式完成操作。

中介模式(Mediator)

本质上是A与B的交互,现在转化为A与B的中介的交互。
通过设置中介,使得整个结构耦合度降低。

命令模式(Command)

通过委派的形式,将命令作用的实例保存在命令里,执行命令即可。

备忘录模式(Memento Pattern)