设计模式----------------观察者模式

来源:互联网 发布:java工作流引擎 编辑:程序博客网 时间:2024/05/19 22:24

转眼都要毕业了,拿出来的代码依旧不能看,我觉得我有必要学习一下大神给我推荐的编码界圣经《设计模式》,并在这里记录下我学习的一些心得,如发现有任何错误欢迎批评指出。

-------------一只瑟瑟发抖的准java程序员。


-------------------------------------------------------------------------------------------------手动分割-----------------------------------------------------------------------------------------------------------------------------


 观察者模式

观察者模式用文字形容的话,就是对一个subject(被观察的主题对象),当其发生变化,或者说其中的某一个方法被调用时,将会通知注册为他的观察者observer的对象,

你观察的subject发生了变化。这里提醒一下,设计模式不是为了解决功能的实现问题,而是结构问题,每一个模式都是为了解决耦合问题,使程序更有弹性,更新扩展时不

对源代码进行修改。这里的观察者模式在这方面表现为,为同一个被观察者注册不同的观察者,并且这些观察者可以自由决定是否继续观察,做到了观察者的可变性。观察

者的重点不是如何实现观察,而是如何松耦合地实现观察,往后的设计模式都是如此。

下面用具体的java代码实现一下。

先从所需要的接口开始吧

SubjectInterface.java

//这是主题需要实现的接口,主要用于对观察者的注册以及删除通知等操作public interface SubjectInterface(){//注册观察者public void registerObserver(ObserverInterface ob);//删除观察者public void removeObserver(ObserverInterface ob);//通知观察者public void nodifyObserver();}


ObserverInterface.java

//这是观察者需要实现的接口,用于接受通知public interface ObserverInterface(){update();}

下面是具体类的实现

Subject.java

//subject接口的实现类,持有Observer的接口实例public class Subject implement SubjectInterface{//用于存放观察者实例,注意类型为观察者的接口而不是实现类,利用java的多态使程序保持弹性,在构造器里初始化。private ArrayList<ObserverInterface> arrayList;public void doSomethingChange(){nodifyObserver();}public Subject(){arrayList = new ArrayList();}public void registerObserver(ObserverInterface ob){arrayList.add(ob);}public void removeObserver(ObserverInterface ob){Int i = arrayList.indexOf(ob);If ( i >=0 ) {arrayList.remove(i);}} public void nodifyObserver(){for (int i = 0 ; i < arrayList.size() ; i++){ObserverInterface  observer = (ObserverInterface)arrayList.get(i);Observer.update();}}}

Observer.java

public class Observer implement ObserverInterface{//接到通知时调用public void update(){doSomething();}public void doSomething(){//do something}}

对于观察者和被观察者来说都有自己的接口,被观察者的实现类持有观察者接口,通过调用接口的方法,调用实现该接口的实例的具体方法。


原创粉丝点击