Java设计模式——观察者模式
2012-09-17 14:44
225 查看
观察者模式定义:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它所有依赖者都会受到通知并自动更新。具体实例可以参考Android中的广播。下面实现一个观察者模式的Demo。
主题接口
主题接口的具体实现类
观察者接口
观察者接口的另一个实现类
测试类
输出结果:
register ConcreteObserver!
register AnotherObserver!
ConcreateSubject state changed!
ConcreteObserver updated!
AnotherObserver updated!
remove ConsreteObserver!
ConcreateSubject state changed!
AnotherObserver updated!
remove AnotherObserver!
ConcreateSubject state changed!
主题接口
package test; /** * 定义主题接口 * @author CYL * */ public interface Subject { public void registerObserver(Observer obs);// 注册观察者 public void removeObserver(Observer obs);// 解注册 public void notifyObservers();// 通知观察者更新 }
主题接口的具体实现类
package test; import java.util.ArrayList; import java.util.List; /** * 具体的主题类,实现类Subject主题接口 * * @author CYL * */ public class ConcreteSubject implements Subject { private int state = 0; private List<Observer> myObservers = new ArrayList<Observer>(); // 改变主题的状态,通过notifyObservers()方法,实现观察者接口内的update() public void changeState(int newState) { if (newState != state) { System.out.println("ConcreateSubject state changed! \n"); this.state = newState; notifyObservers(); } } // 如果myObservers中不包含观察者obs,则将obs添加到myObservers列表中 @Override public void registerObserver(Observer obs) { if (myObservers.contains(obs)) { return; } else { myObservers.add(obs); } } // 解注册,当myObservers列表中包含obs时,则将其移除 @Override public void removeObserver(Observer obs) { if (myObservers.contains(obs)) { myObservers.remove(obs); } } // 通知列表myObservers中所有对象进行更新 @Override public void notifyObservers() { for (Observer obs : myObservers) { obs.update(); } } }
观察者接口
package test; /** * 定义观察者接口 * @author CYL * */ public interface Observer { public void update(); }观察者接口的一个实现类
package test; public class ConcreteObserver implements Observer { // 复写Observer接口中的update()方法 @Override public void update() { System.out.println("ConcreteObserver updated!"); } }
观察者接口的另一个实现类
package test; public class AnotherObserver implements Observer { @Override public void update() { System.out.println("AnotherObserver updated!"); } }
测试类
package test; public class Test { public static void main(String[] args) { ConcreteSubject subject = new ConcreteSubject();// 实例化一个具体的主题类对象 ConcreteObserver cObs = new ConcreteObserver();// 实例化两个具体的观察者类对象 AnotherObserver aObs = new AnotherObserver(); // 在主题对象中注册两个观察者对象 System.out.println("register ConcreteObserver!"); subject.registerObserver(cObs); System.out.println("register AnotherObserver!"); subject.registerObserver(aObs); // 改变主题状态 subject.changeState(2); System.out.println("\n"); System.out.println("remove ConsreteObserver!"); subject.removeObserver(cObs);// 解注册观察者对象cObs subject.changeState(3); System.out.println("\n"); System.out.println("remove AnotherObserver!"); subject.removeObserver(aObs); subject.changeState(4); } }
输出结果:
register ConcreteObserver!
register AnotherObserver!
ConcreateSubject state changed!
ConcreteObserver updated!
AnotherObserver updated!
remove ConsreteObserver!
ConcreateSubject state changed!
AnotherObserver updated!
remove AnotherObserver!
ConcreateSubject state changed!
相关文章推荐
- JAVA设计模式(观察者模式)
- Java设计模式——观察者模式(Observer Pattern)
- Java设计模式之观察者模式
- JAVA设计模式—观察者模式和Reactor反应堆模式
- Java设计模式——观察者模式
- Java设计模式之观察者模式
- java设计模式-----观察者模式
- Java设计模式_行为型_观察者模式_任意行为的监听
- java设计模式--观察者模式(Observer)
- java设计模式之观察者模式
- Java设计模式之观察者模式
- java设计模式之观察者模式
- java设计模式之观察者模式
- java设计模式--事件监听器模式和观察者模式
- java观察者设计模式
- java 设计模式 观察者模式
- Java设计模式--观察者模式
- Java设计模式之观察者模式
- Java设计模式——观察者模式
- Java设计模式之观察者模式