20 head first 设计模式(2018第10本书)
封闭变化 - 建立 算法族 - 让算法变化独立于用户
举例:
对于一些特立独行的鸭子设计,不变部分采用继承,变化部分采用组合——动作委托给别人处理而不是定义在鸭子内部。
注意我们要换种说法——不再把行为说成一组动作,而是描述成算法。这些算法可以互换的。
企鹅是一个鸭子,企鹅有一些算法。
2.Observer
松耦合-当观察对象改变时,依赖的观察者都收到通知-pull
主题接口-主题实现
观察者接口-观察者实现
java.util.Observable类和Observer接口
Oberavable 是类 Oberaveser 是接口 感觉要搞反了;
其它还有:JButton 的注册-监听
3.Decorator 装饰
动态将责任添加到对象,利用继承来保持类型,而使用组合添加行为。
包装类
JDK中的InputStream-ImputStreamFilter-BufferedInputStream
利用装饰者,造成程序中有大量小类,当了解装饰的的原理后就能分辨如何组织 的了。
4.工厂方法 定义了一个创建对象的接口,由子类决定具体实例化,
产品延迟到子类去实现,使用继承
5.抽象工厂 提供一个接口创建相关或依赖对象的家族,而不需要明确指定具体类。
使用对象组合
依赖倒置原则 : 依赖抽象 , 工厂帮助我们依赖抽象 编程
6. 单件模式 确保一个类只有一个实例,并提供全局访问点
单件和全局变量的比较
单件在多线程下的挑战
单件在多线程(同步)方法下的性能改进:懒汉和饿汉
7.命令模式 将请求封装成对象,可以让你使用不同的请求,队列 ,或日志,来参数化其它对象。命令模式也可以支持撤消操作。
将发出请求的对象和执行请求的对象解耦 。两者之间是通过命令对象沟通的。
命令对象封装了一个或一组操作
调用者通过调用命令对象的Execute发出请求,使接收者的动作被调用
可以使用“聪明”命令对象,即直接实现了请求,而不是委托给接收者。