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)
通过委派的形式,将命令作用的实例保存在命令里,执行命令即可。