设计模式笔记(无图)
继承与组合
应尽量把相同的特性提取到超类,把各自的特性抽象成接口。
具体实现可以使用组合。
如果不能确定的话就多用组合,少用继承。
观察者模式
1、Observer(观察者)注册成为Obserble(被观察者)的通知对象
2、Obserble有变化就会通知观察者
3、Observer取消注册,Obserble不通知该Observer
装饰者模式
难题:饮料可以加各种各样的小料,最终怎么结算钱?
层层嵌套,最终的本质不变,只是添加了各种新的特性。注意和组合区分,组合是将多特性组合起来。
使用时注意具体场景,使用不同的设计模式。
工厂模式
委托代理生产对象
单例模式
供全局调用的唯一对象。
命令模式
用于封装方法,可以实现复杂操作。
一个命令接口被多个不同实例实现自己的方法。
适配器模式
接口转换。
例如:电源适配器。将电源的220V转换为5V。
三孔转二孔等等。
三个角色:调用方,适配器,被适配者。
调用发无法直接调用被适配者,通过适配器来调用到适配者。
模板方法
模板方法在一个方法中定义一个算法的骨架,而将实际的操作延迟到子类中。
例如:泡茶喝泡咖啡步骤一致,使用一个泡饮料的模板方法,各自实现具体的步骤。
Java中的Compare,利用子类实现的Compare来排序
迭代器和组合模式
迭代器模式提供一个方法顺序的访问一个聚合对象的各个元素,不暴露其内部的表示。
组合模式的含义就是将不同的数据组合起来。只返回一个迭代器。
例子:餐厅合并之后多个菜单合并成一个组合菜单。
状态模式
状态模式允许内部状态改变时,改变它的行为。
代理模式
代理和装饰:装饰可以增加行为,代理用来控制代理对象行为。
复合模式
设计模式组合使用。
其他
桥接,生成器(Builder),责任链,蝇量模式(一份对象通过数量表示多个对象),
解释器,中介者,备忘录(返回之前的状态),原型模式,访问者模式,
设计模式是某情景下针对某个问题的某种解决方案。