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

设计方式-观察者模式Observer

2012-10-15 
设计模式----观察者模式ObserverObserver模式Observer模式的功用,是希望两个(或多个)对象,我们称之为Subje

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

Observer模式

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


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

? ?public voidchangeDate(){
??????System.out.println("SubjectObservablechangeDate");
??????this.setChanged();
?? ?}
}

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


Main函数
??? publicstatic 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

热点排行