观察者设计模式
Posted 逆流而上
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了观察者设计模式相关的知识,希望对你有一定的参考价值。
1.观察者接口及实现类
//一个Observer接口: 1.public interface Observer { 2. public void update(); 3.} //两个实现类: 1.public class Observer1 implements Observer { 2. 3. @Override 4. public void update() { 5. System.out.println("observer1 has received!"); 6. } 7.} 1.public class Observer2 implements Observer { 2. 3. @Override 4. public void update() { 5. System.out.println("observer2 has received!"); 6. } 7. 8.}
2.订阅者接口及实现类
//订阅者接口 public interface Subject { 2. 3. /*增加观察者*/ 4. public void add(Observer observer); 5. 6. /*删除观察者*/ 7. public void del(Observer observer); 8. 9. /*通知所有的观察者*/ 10. public void notifyObservers(); 11. 12. /*自身的操作*/ 13. public void operation(); 14.} //实现接口的抽象类 1.public abstract class AbstractSubject implements Subject { 2. 3. private Vector<Observer> vector = new Vector<Observer>(); 4. @Override 5. public void add(Observer observer) { 6. vector.add(observer); 7. } 8. 9. @Override 10. public void del(Observer observer) { 11. vector.remove(observer); 12. } 13. 14. @Override 15. public void notifyObservers() { 16. Enumeration<Observer> enumo = vector.elements();//放入观察者的集合,并循环遍历来调用(通知)观察者的update()方法 17. while(enumo.hasMoreElements()){ 18. enumo.nextElement().update(); 19. } 20. } 21.} //继承抽象类的具体实现类 1.public class MySubject extends AbstractSubject { 2. 3. @Override 4. public void operation() { 5. System.out.println("update self!"); 6. notifyObservers(); 7. } 8. 9.}
3.测试使用
//将所有 的观察者放入集合并调用订阅函数 public class ObserverTest { 2. 3. public static void main(String[] args) { 4. Subject sub = new MySubject(); 5. sub.add(new Observer1()); 6. sub.add(new Observer2()); 7. 8. sub.operation(); 9. } 10. 11.}
输出结果
update self!
observer1 has received!
observer2 has received!
以上是关于观察者设计模式的主要内容,如果未能解决你的问题,请参考以下文章