第五章 依赖倒转
原则
- 高层模块不应该依赖底层模块,两者都应该依赖抽象
- 抽象不应该依赖细节,细节应该依赖抽象
子类能够完全替换父类,且软件功能不受影响,父类才能真正被复用,且子类能在父类的基础上增加新的行为。
程序的所有依赖关系都终止于抽象类或者接口,从而增加扩展能力。
第六章 装饰模式
与建造者模式类似,但是装饰模式的过程是不稳定的。
装饰模式,动态的给对象添加一些额外的职责。在增加功能的角度,装饰模式比子类更加灵活。
当系统需要新的功能时只需要添加新的装饰类,原有类的核心职责不变。
- 简化原有类
- 将类的核心职责和装饰功能区分,去除类中重复的装饰逻辑
第七章 代理模式
proxy
为其他对象提供一种代理以控制对这个对象的访问。
应用场合
- 远程代理 为一个对象在不同的地址空间提供局部代表(隐藏一个对象存在与不同地址的事实)
- 虚拟代理 根据需要创建开销大的对象,通过它来存放实例化需要很长时间的真实对象
- 安全代理 用来控制真实对象访问时的权限
- 智能指引 当调用真实对象时代理处理另外一些事
第八章 工厂方法
简单工厂和工厂方法的区别:
简单工厂的优点在于工厂中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类。但是这么做遇到添加新的功能需要增加新的逻辑种类,对修改开放了,违反了开闭原则。
工厂方法定义了一个用于创建对象的接口,让子类决定实例化哪一个类。从而将一个类的实例化延迟到了子类。