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

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

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

这段代码是主题的接口:

packageobeserver;public interfaceSubject {public voidregisterObserver(Observer observer);public voidremoveObserver(Observer observer);public voidnotifyObserver();

}

下面是观察者的接口:

packageobeserver;public interfaceObserver {public voidupdate(String str);

}

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

packageobeserver;importjava.util.ArrayList;importjava.util.List;public class concreteSubject implementsSubject {

List list = new ArrayList();

@Overridepublic voidregisterObserver(Observer observer) {//TODO Auto-generated method stub

list.add(observer);

}

@Overridepublic voidremoveObserver(Observer observer) {//TODO Auto-generated method stub

list.remove(observer);

}

@Overridepublic voidnotifyObserver() {//TODO Auto-generated method stub

for(Observer o : list) {

o.update("Hello, World!");

}

}

}

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

packageobeserver;public class concreteObserver implementsObserver {

@Overridepublic voidupdate(String str) {//TODO Auto-generated method stub

System.out.println(str);

}

}

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

packageobeserver;public classobserverTest {public static voidmain(String[] args) {

Subject s1= newconcreteSubject();

Observer o1= newconcreteObserver();

Observer o2= newconcreteObserver();

Observer o3= newconcreteObserver();

s1.registerObserver(o1);

s1.registerObserver(o2);

s1.registerObserver(o3);

s1.notifyObserver();

}

}

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值