首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计形式-Observer模式(由浅入深二)

2012-11-17 
设计模式---Observer模式(由浅入深二)在第一部分我们已经学习了一个实例,但是在有些时候,一个要成为观察者

设计模式---Observer模式(由浅入深二)

在第一部分我们已经学习了一个实例,但是在有些时候,一个要成为观察者的类可能已经存在,这事可能不希望对其进行修改。如果这样子的话,很容易的就想到了Adapter模式,我们可以用Adaper模式进行转换,下面我将上一个实例转换的模式图列出如下:

设计形式-Observer模式(由浅入深二)

上面的图很容易理解,所以在这里不再用代码实现。

下面我们来继续第一部分遗留下来的东西,使用jdk自带的Observer接口和Observable类来实现Observer模式(此部分代码需要读者了解Observer接口和Observable类,可以查看jdk原码:java/util/Observer 或 java/util/Observable):

?

package my.observer;import java.util.Observable;import java.util.Observer;class SoftSchool extends Observable{public SoftSchool(){}private String info;public void setInfo(String info){this.info = info;setChanged();notifyObservers(info);}          }    class Teacher implements Observer{    public void update(Observable obj,Object arg){System.out.println("Hi sir,today have a meeting about"+arg);}    }class Student implements Observer{public void update(Observable obj,Object arg){System.out.println("Hi Guys,today have a meeting about"+arg);}}class Cleaner implements Observer{public void update(Observable obj,Object arg){System.out.println("Hi Cleaners,today have a meeting about"+arg);}}public class TestObserver{public static void main(String args[]){SoftSchool ss = new SoftSchool();Observer student = new Student();Observer teacher = new Teacher();Observer cleaner = new Cleaner();ss.addObserver(student);ss.addObserver(teacher);ss.addObserver(cleaner);ss.setInfo("Wrap-up meeting");}}

?

运行:

写道Hi Cleaners,today have a meeting aboutWrap-up meeting
Hi sir,today have a meeting aboutWrap-up meeting
Hi Guys,today have a meeting aboutWrap-up meeting

?最后总结一下Observer模式:

1,意图:在对象之间定义一种一对多的依赖关系,这样当一个对象的状态改变时,所有依赖者都将得到通知并自动更新。

2,问题:当某个事件发生时,需要向一系列变化着的对象发出通知。

3,解决方案:Observer将监视某个事件的责任委托给中心对象:Subject。

4,实现:让某个事件发生时需要知道的对象(Observer)将自己注册到另一个监视事件发生或自己触发事件的对象(Subject)上。事件发生时,Subject告诉Observer事件发生。为了对所有Observer类型的对象实现Observer接口,有时候需要使用Adapter模式。

热点排行