《大话设计模式》读书笔记:建造者模式与观察者模式

1.     建造者模式

建造者模式(Builder Pattern),是将一个复杂对象的创建构造与其它功能性方法(或函数)分离到不同的封装之中,使同样的构造过程能够用于不同的功能表示。

建造者模式主要分为三个部分:产品、建造者以及指挥者。其中,产品就是封装了功能性方法和成员变量的对象,它在建造者内部创建,并通过建造者提供的public方法返回。建造者封装了产品对象的构造过程,它的唯一作用就是将传入的参数作为产品实例的初始化参数并将其创建后返回。指挥者是对建造者对象的选择调用,通过传入的建造者实例来返回产品实例。建造者模式的UML类图如下:

《大话设计模式》读书笔记:建造者模式与观察者模式_第1张图片

建造者模式的优点在于将构造代码与功能代码分离,分别封装成建造者和产品两种对象加以隐藏。如果需要改变构造的过程,则重新定义一个建造者对象;如果需要重新设计功能,则重新定义一种产品对象,并为其定义相应的建造者即可。对于一些构造相对复杂的对象,建造者模式可以大大降低构造模块与表示模块之前的耦合度。不过,对于构造较为简单的对象,采用建造者模式反而会增加一些不必要的麻烦。

建造者模式与几种工厂模式一样,都是构建类型的模式。它与工厂模式的不同之处在于,它属于“聚合”的过程,而非“继承”,因此,它更适合那种由多种组件组装成一个完整实例的场合,而不太适合从上而下直接创建实例的场合,而工厂方法显然更适用于后者。

另外,采用建造者模式的另一个条件是:构造模块或算法有必要独立于对象的其它模块而存在的时候。


2.     观察者模式

观察者模式(Observer Pattern),定义了一种一对多的依赖关系,让多个观察者对象同时监听一个被观察者(主题)对象。当主题对象的状态发生变化时,它将通知所有的观察者对象,并让它们能够自动更新自身的状态。

显而易见,观察者模式由两个部分组成:观察者对象和被观察者(主题)对象。它的过程一般为:注册→ 通知 → 更新 → 撤销。主题对象为观察者对象提供注册、撤销以及通知的接口,并维护一个需要观察该主题对象的观察者对象集合;观察者对象则只需实现更新其自身状态的方法即可。观察者模式的UML类图如下:

《大话设计模式》读书笔记:建造者模式与观察者模式_第2张图片

通常,让观察者更新其自身状态有如下几种方式:

1.      直接在主题对象的通知方法中调用观察者对象的更新方法;

2.      在主题对象的通知方法中改变观察者对象的某一状态域,当观察者对象检测到该状态域发生变化时,自动调用更新方法。

事件模型是观察者模式的一种典型实现,观察者模式本身也被称为“订阅—发布模式”。可见,观察者模式通常被用于一组对象的功能或状态依赖于另一组(或一个)对象的状态的场合。也就是说,一个状态的改变,可能引发一系列对象随之发生变化的情况。在非观察者模式下,这些类之间的耦合情况可能会很严重,而采用观察者模式,则可以将这两种类型的对象划分一个明显的边界,并通过接口之间的调用(依赖倒转原则),尽量降低它们之间的耦合度。

你可能感兴趣的:(《大话设计模式》读书笔记:建造者模式与观察者模式)