现在的位置: 首页 > 操作系统 > 正文

Java设计模式学习笔记(观察者模式)

2020年02月06日 操作系统 ⁄ 共 1614字 ⁄ 字号 评论关闭

观察者模式说起来很简单,就是一个订报纸的模式。但是实际上这部分我觉得还是很有意思的,《Head First设计模式》里还有一些还没看完,也是因为理解的不够深吧。

Head First设计模式PDF高清完整中文版 下载地址 https://www.xuebuyuan.com/Linux/2017-02/140536.htm

观察者模式会包含两个组件:观察者和主题。

这段代码是主题的接口:

package obeserver;

public interface Subject { public void registerObserver(Observer observer); public void removeObserver(Observer observer); public void notifyObserver();}

下面是观察者的接口:

package obeserver;

public interface Observer { public void update(String str);}

然后就是具体的主题实现:

package obeserver;

import Java.util.ArrayList;import java.util.List;

public class concreteSubject implements Subject { List<Observer> list = new ArrayList<Observer>(); @Override public void registerObserver(Observer observer) { // TODO Auto-generated method stub list.add(observer); }

@Override public void removeObserver(Observer observer) { // TODO Auto-generated method stub list.remove(observer); }

@Override public void notifyObserver() { // TODO Auto-generated method stub for (Observer o : list) { o.update("Hello, World!"); } }

}

下面的代码是具体的观察者实现:

package obeserver;

public class concreteObserver implements Observer {

@Override public void update(String str) { // TODO Auto-generated method stub System.out.println(str); }}

下面写一段测试代码看看:

package obeserver;

public class observerTest { public static void main(String[] args) { Subject s1 = new concreteSubject(); Observer o1 = new concreteObserver(); Observer o2 = new concreteObserver(); Observer o3 = new concreteObserver(); s1.registerObserver(o1); s1.registerObserver(o2); s1.registerObserver(o3); s1.notifyObserver(); }}

这段测试代码会输出三行的“Hello, World!”。

其实我觉得这里的update方法写Hello,world是不能说明问题的。其实这个方法里应该是更新观察者的其他一些状态的,比如书里写的气象站的一些数据(气温,湿度等),这样才叫做update。

总结一下,观察者模式其实和订报纸很像,报社(主题)维护着订阅方法和取消订阅方法,同时也维护着送报纸的方法。而订报纸的人(观察者)接收到报纸之后,看报了就能了解新闻,增广见闻,这就是update了。

抱歉!评论已关闭.