- 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
- 把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。
- 把不变的放在接口里,而变化放在实现里。
- 针对接口(超类型)编程,而不是针对实现编程。
- 多用组合,少用继承。
- 类应该对扩展开发,对修改关闭。
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换。此模式让算法的变化独立于使用算法的客户。
想想那只会叫会飞的鸭子。
观察者:气象站的实现
装饰对象:星巴克咖啡
简单工厂/工厂方法/抽象工厂: 做比萨
Singleton: threadpool, cache, registry - 巧克力工厂的锅炉
处理多线程,把getInstance()变成同步(synchronized)方法,但是会降低性能。
双重检查加锁。。volatile
命令模式:封装调用 餐厅,遥控器,日志请求,qscript - 将动作封装成命令对象
Command.excute() //Core
Think about Qscript.excute().
每个command对象可以当作线程放在线程池中,取出来即可执行
适配器和外观
Adapter:将一个接口换成另一个接口。 实现方式:继承和组合
Facade:让接口更简单
装饰者:不改变接口,但是加入责任
浙公网安备 33010602011771号