观察者模式通俗点讲相当于一个电台广播。打开收音机,找到电台这叫注册,离开电台叫注销,从电台听到的栏目就叫更新内容。内容对于注册了的用户时时更新,对于没有注册和已经注销了的用户也没有什么作用。
电台又可以叫做主题,打开电台的人可以叫做观察者。那么可以总结出主题具有更新内容的事件,而观察者可以注册、注销的事件。
对于一个主题,可以按照如下去设计代码:
// 主题
public interface Subject{
public void registerObservers(Observer o);
public void removeObservers(Observer o);
public void notifyObservers();
}
// 观察者
pubilc interface Observer{
public void update(String name,boolean sex);
}
// 观察者行为
public interface DisplayElement{
public void display();
}
通过使用接口我们可以更方便的扩展。
public class Thread implements Subject{
private String name;
private boolean sex;
private List<Observer> obList;
public Thread(){
obList = new ArrayList(Observer)();
}
@override
public void registerObservers(Observer o){
obList.add(o);
}
@override
public void removeObservers(Observer o){
int index = obList.getIndex(o);
if(index>=0){
obList.remove(index);
}
}
public void notifyObservers(){
for(Observer obs : obList){
obs.update(name,sex);
}
}
public void updateThreadProperty(String name,boolean sex){
this.name = name;
this.sex = sex;
notifyObservers();
}
}
public class ObserverPerson implements Observer,DisplayElement{
private String name;
private boolean sex;
public ObserverPerson(Thread th){
th.registerObserver(this);//将当前对象注册到广播中
}
@override
public void update(String name,boolean sex){
this.name = name;
this.sex = sex;
displayElement();
}
@override
public void displayElement(){
System.out.println("name is "+this.name+"sex is"+(sex)?"man":"woman");
}
}
public class Test{
public static void main(String[] args){
Thread th = new Thread();
ObserverPerson p1 = new ObserverPerson(th);
ObserverPerson p2 = new ObserverPerson(th);
ObserverPerson p3 = new ObserverPerson(th);
th.updateThreadProperty("will",true);
th.updateThreadProperty("lucy",false);
}
}
java中其实已经实现了观察者模式,上面代码中的Subject相当于java.util中的observerable类,Observer相当于java.util中的observer接口。
分享到:
相关推荐
Qt设计模式之观察者模式
设计模式之观察者模式Java版本实现和UML类设计图
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
设计模式 之观察者模式.pdf
设计模式之观察者模式介绍观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个
23种设计模式之观察者模式对观察者模式进行了简单的介绍,并附带了例子程序,和大家分享
Android设计模式之观察者模式
NULL 博文链接:https://jacky-dai.iteye.com/blog/1132063
观察者设计模式-Demo 事件委托、改变窗体颜色.... 希望对大家有用!!!!
C++源码实现设计模式之观察者模式,VC2005下编译通过
观察者模式
观察者模式(Observer) 用意:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。
java观察者模式的实例代码。从最简单的实例开始,到观察者模式。有什么问题可以加扣扣共同探讨