第十四章 观察者模式(发布-订阅模式)
定义了一种一对多的依赖关系,让多个观察者对象同事监听某一个主体对象。这个主题对象在状态发送改变时会通知所有观察者对象,使他们能够自动更新自己。
一个系统分割成一系列相互协作的类导致维护相关对象之间的一致性很困难。但是为了维持一致性使得各个类之间耦合在一起又会给维护、扩展和重用带来不便。观察者模式解决了这个问题。
观察者模式的作用在于接触耦合,让耦合的双方依赖于抽象而不是具体细节,从而使得各自的变化都不会影响另外一边。
第十五章 抽象工厂
提供了一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
优点:
- 1 实例化具体的工厂类的操作在一个应用中只需要初始化的时候出现一次,使得改变应用的具体工厂类很容易。通过改变具体工厂类即可使用不同的产品配置。
- 2 具体的创建实例过程与客户端分离,客户端通过它们的抽象接口操纵实例,产品的具体类名也从具体工厂中分离不会出现在客户代码中。
缺点:
- 1 当抽象工厂需要增加功能时需要改动大量的类
可以通过反射的方式对抽象工厂进行优化,反射需要依赖的工厂相关配置可以写在配置文件中切换工厂不需要修改程序。
在所有用到简单工厂的地方都可以考虑使用反射技术去除switch和if,解除分支判断带来的耦合。但是反射用多了有什么坏处呢?
第十六章 状态模式
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了。
面向对象设计希望做到的是代码的责任分离,实现单一职责原则,所以方法不应该过长。
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。
优点:
- 将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。通过新定义子类可以容易的增加新的状态和行为。
- 消除庞大的条件分支语句,减少相互之间的耦合。