设计模式(2)-----观察者模式

      定义:The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically. (观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新)

      观察者模式有时又被称为发布/订阅模式,是软件模式中的一种。在此模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知,这通常透过呼叫各观察者所提供的方法来实现,此种模式通常用来坐事件处理系统。

     观察者模式有两个接口:Subject(被观察者)和Observer(观察者)

       Subject(被观察者接口):

           定义了ConcreteSubject的统一接口

           每个Subject可以有多个Observer

       ConcreteSubject(具体被观察对象):

           维护所有具体观察者的引用的列表

           状态发生变化时会发送通知给所有注册的观察者

       Observer(观察者接口)

            定义了ConcreteObserver的统一接口

            定义了一个update()方法,在被观察对象状态改变时会被调用

       ConcreteObserver(具体观察者)

             维护了一个对ConcreteSubject的引用

             特定状态与ConcreteSubject同步

             实现Observer接口,通过update()方法接受ConcreteSubject的通知

   实例代码:

       

Subject .java

public interface Subject{
void attach(Observer observer);//添加观察者
void detach(Observer observer);//删除观察者
void inform();//通知所有观察者
}

ConcreteSubject .java

public class ConcereteSubject implements Subject {
public void attach(Observer observer){
observersVector.addElement(observer);
}
public void attach(Observer observer){
observersVector.removeElement(observer);
}
public void inform(){
//对observersVector中的所有元素调用其update方法
}
}


Observer.java

public interface Observer{
void update();//更新观察者
}

ConcreteObserver.java

public class ConcreteObserver implements Observer{
public ConcreteSubject consubject;
//在此添加ConcreteSubject引用
public ConcreteObserver(ConcreteSubject consubject);
{
this. Consubject = consubject;
consubject. attach (
this);//添加观察者
}
public void update(){
}
}

 

 

 

posted @ 2010-06-29 11:28  gistone  Views(236)  Comments(0)    收藏  举报