您的位置:首页 > 其它

设计模式之观察者模式

2015-07-07 22:29 363 查看

观察者模式

定义一种一对多的依赖关系,让多个观察对象同时监听某一主题对象。这个主题对象在状态发生变化时会通知所有的观察者对象,使他们自动更新状态

Subject

package com.hml.observer;

import java.util.ArrayList;
import java.util.List;

public  class Subject {
List<Observer> observers = new ArrayList<Observer>();

public void addObserver(Observer o) {
observers.add(o);
}

public void deleteObserver(Observer o) {
observers.remove(o);
}

public void notifyChange() {
for (Observer o : observers) {
o.update();
}
}
}


Observer

package com.hml.observer;

public interface Observer {
public void update();
}


ConcreateObserverA

package com.hml.observer;

public class ConcreateObserverA implements Observer {

public void update() {
System.out.println("A update");
}

}


ConcreateObserverB

package com.hml.observer;

public class ConcreateObserverB implements Observer {

public void update() {
System.out.println("B update");
}

}


Test

package com.hml.observer;
public class Test {
public static void main(String[] args) {
Subject subject = new Subject();
subject.addObserver(new ConcreateObserverA());
subject.addObserver(new ConcreateObserverB());
subject.notifyChange();
}
}


类图



将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维护一致性而使各个类紧密耦合,这样会给维护、扩展和重用带来不便。而观察者模式的关键是主题Subject和观察者Observer,一个Subject可以有人以数量的依赖它的Observer,一旦Subject的状态发生了变化,所有的Observer都可以得到通知。Subject发出通知并不需要知道谁是他的观察者,也就是说,具体观察者是谁,他根本不需要知道。而任何一个具体的观察者都不知道也不需要知道其他观察者的存在。因此当一个对象的改变需要同时改变其他的对象时,就可以使用观察者模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: