`
neeleon
  • 浏览: 176236 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多

Observer模式

Observer模式的功用,是希望两个(或多个)对象,我们称之为Subject和Observer,当一方的状态发生改变的时候,另一方能够得到通知。也就是说,作为Observer的一方,能够监视到Subject的某个特定的状态变化,并为之做出反应。


Java代码实现
import java.util.Observable;
//被观察的对象,需要继承 Observable 而且在方法中,必须要this.setChanged(),
//只有这样,观察者才能被通知到
public class SubjectObservable extends Observable{

   public void changeDate(){
        System.out.println("SubjectObservable changeDate");
        this.setChanged();
    }
}

class Subject{
    SubjectObservable f = new SubjectObservable();
//注册观察者
    public void registerObserver(java.util.Observer o){
        f.addObserver(o);
    }
    void changeSubject(){
        f.changeDate();
//通知观察者,这里的通知,只有f的this.setChanged()触发后才生效。
        f.notifyObservers();
    }
}
//一号观察者,需要实现 java.util.Observer ,并且 要重写update() 方法
 class SubjectObserver  implements java.util.Observer {
      public void update(Observable o, Object arg) {
          SubjectObservable subject=(SubjectObservable) o;
         System.out.println("SubjectObserver work ");
      }
    }
 //二号观察者,同样需要实现 java.util.Observer ,并且 要重写update() 方法
 class SubjectObserver2  implements java.util.Observer {
      public void update(Observable o, Object arg) {
          SubjectObservable subject=(SubjectObservable) o;
         System.out.println("SubjectObserver2 work ");
      }
    }


Main函数
    public static void main(String args[]){
        Subject s = new Subject();
        SubjectObserver fm = new SubjectObserver();
        SubjectObserver2 fm2 = new SubjectObserver2();
//给s对象注册2个观察者
        s.registerObserver(fm2);
        s.registerObserver(fm);
        s.changeSubject();
    }

执行结果:
SubjectObservable  changeDate
SubjectObserver work
SubjectObserver2 work
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics