1.策略模式

定义算法族,分别封装起来,让他们可以互相替换,此模式让算法的变化独立于使用算法的客户。

书里面举的例子是要建立一个鸭子类,但是面对着许多问题,缺乏良好的OO软件设计原则。

经过深思熟虑后,他的解决方法如下

  1. 建立一个鸭子的抽象类,对每个鸭子的共性定义,将行为设置为接口类。
  2. 具体行为实现行为接口,将它们封装起来。

策略模式区别于以往的具体类实现具体行为,这样可以保证该程序是具有弹性的,并保证了松耦合。

  1. 在定义具体鸭子类时具体行为。
  • 针对接口,而不是针对实现编程。

2.观察者模式

定义了对象间的一对多依赖,这样一来,当一个对象改变状态时,她的所有依赖者都会收到通知并自动更新。

以报社来举个例子

  1. 报社的业务就是出版报纸
  2. 向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸。
  3. 当你不再想看报纸时,取消订阅,他们就不会再送新报纸来。
  4. 只要报社还在运营,就会一直有人(或单位)向他们订阅报纸或取消订阅报纸。

在上面的例子里面,报社就是主题subject(被观察者),而订阅它的订户们就是观察者observer,他们之间的关系可以用下面这张图来表示。
HeadFirst设计模式笔记
Subject:这是主题接口,对象使用此接口注册为观察者,或者把自己从观察者中删除。
ConcreteSubject:一个具体主题总是实现主题接口,除了注册和撤销方法之外,具体主题还实现了notifyObservers()方法,此方法用于在状态改变时(不改变时调用方法不执行动作)更新所有当前观察者。
Obsever:所有潜在的观察者必须实现观察者接口,这个接口只有update方法,当主题状态改变时(可以设置一个阈值)它被调用。
ConcerteObsever:具体的观察者可以是实现此接口的任意类。观察者必须注册具体主题,以便接收更新。

要点

  • 主题用一个共同的接口来更新观察者。
  • 观察者与可观察者之间采用了松耦合方式结合(loosecoupling), 可观察者不知道观察者的细节, 只知道观察者实现了观察者接口。
  • 不要依赖特定的通知次序。
  • 有必要的话,自己实现Observable

未完待续

3.装饰者模式

动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。
  • 装饰者与被装饰对象有相同的超类型
  • 你可以用一个或多个装饰者包装一个对象
  • 既然装饰者与被装饰对象有相同的超类型,在任何需要原始对象(被包装的)的场合,均可以使用装饰过的对象代替它。
  • 装饰者可以在委所委托被装饰者的行为之前与之后,加上自己的行为,以达到特定的目的,甚至可以将被装饰者的行为整个取代掉,而达到特定的目的
  • 对象可以在任何时候被装饰,所以可以在运行地时候动态地,不限量地用你喜欢的装饰者来装饰对象。

4.简单工厂

简单工厂并不是一种真正的设计模式,反而比较像一种编程习惯。
运用简单工厂的好处
  • 该工厂可能有许多客户, 他们可能运用不同的方式来处理商品,这样做可以复用代码。

5.工厂方法

相关文章: