Head First设计模式 1 设计模式入门 策略模式 观察者模式

关于基本的OOP特征:

OOP的几大特征是抽象 继承 封装 多态。

我们把共同的部分抽象出来作为抽象类的存在,使用继承和接口来实现多态,然后私有的部分封装起来。一定程度上说,这些概念都是简单的设计模式。

设计原则1:

找出应用中可能需要变化的部分,把他们独立出来,不要和那些不需要变化的部分融合在一起。

设计原则2:

针对接口编程,而不是针对实现编程。

这里的接口包含抽象类。

设计原则3:

多用组合 少用继承。

组合和继承都能作为将不变的代码和变化的代码分开的方式,但是组合更加灵活,可以将一个依赖的行为封装为一个类,然后通过接口的方式引入,这样不会依赖于类的层级结构,而且可以在运行的时候动态改变(通过set方法改变依赖的组合对象)。

通俗的讲,继承是一种"是一个"的关系,组合是一种"有一个"的关系,大部分情况下我们需要的都是"有一个"。

策略模式:

定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。

个人觉得,一定程度上说,策略模式就是组合的简单实用场景。如,鸭子的"叫"行为,不同的鸭子这种行为变现不同,有的呱呱叫,有的不会叫,我们把这种行为设置为一个接口,然后定义几种不同的叫的实现,以组合的方式注入到不同的鸭子里。策略模式常见到都不能认为是一种模式了,已经是一种通用的编码方式了。

观察者模式

有时被称作发布/订阅((pub/sub))模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

在发布订阅模式的说法中,发布者发布pubscribe消息,订阅者订阅subscribe消息。

在观察者模式的说法中,分为主题(Subject),观察者(Observer)。

其中主题(Subject)的接口是:

  • 增加观察者(Observer接口)
  • 移除观察者
  • 向观察者(们)发出通知

观察者(Observer)的接口是:

  • update方法。接收主题的通知。

java内置了观察者模式,其中:

java.util.Observable代表主题。方法如下:

构造方法摘要

Observable()
构造一个带有零个观察者的 Observable。

 

 

方法摘要

void

addObserver(Observer o)
如果观察者与集合中已有的观察者不同,则向对象的观察者集合中添加此观察者。

protected void

clearChanged()
指示对象不再改变,或者它已对其所有的观察者通知了最近的改变,所以 hasChanged 方法将返回 false。

int

countObservers()
返回 Observable 对象的观察者数目。

void

deleteObserver(Observer o)
从对象的观察者集合中删除某个观察者。

void

deleteObservers()
清除观察者列表,使此对象不再有任何观察者。

boolean

hasChanged()
测试对象是否改变。

void

notifyObservers()
如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。

void

notifyObservers(Object arg)
如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。

protected void

setChanged()
标记此 Observable 对象为已改变的对象;现在 hasChanged 方法将返回 true。

 

 

public interface Observer接口代表观察者。方法如下:

 

方法详细信息

update

void update(Observable o,

Object arg)

只要改变了 observable 对象就调用此方法。应用程序调用 Observable 对象的 notifyObservers 方法,以便向所有该对象的观察者通知此改变。

参数:

o - observable 对象。

arg - 传递给 notifyObservers 方法的参数。

 

 

 

posted on 2017-08-09 21:56  张小贱1987  阅读(149)  评论(0编辑  收藏  举报

导航