本文共 1545 字,大约阅读时间需要 5 分钟。
今天回顾了下观察者模式,网上有简单的,也有复杂的,但是万变不离其宗。
观察者模式有两个角色:发布者(Subject)和订阅者(Observer),发布者拥有订阅者的一个列表,当发布者需要通知订阅者时,遍历列表中的订阅者,逐一调用事件通知给每一个订阅者,这样就完成了观察者模式。
1.发布者
import java.util.ArrayList;import java.util.List;public class Subject { //list of observer private List2.订阅者list = new ArrayList (); public void AddObserver(Observer observer){ System.out.println("add observer wiht name: " + observer.GetName()); list.add(observer); } public void RemoveObserver(Observer observer){ System.out.println("remove observer wiht name: " + observer.GetName()); list.remove(observer); } public void NotifyAllObserver(String message){ for(Observer observer : list){ observer.Update(message); } }}
public class Observer { private String name; public Observer(String name){ this.name = name; } public String GetName(){ return this.name; } public void Update(String message){ System.out.println(message); }}3.测试
public class Hello { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Subject subject = new Subject(); Observer observer1 = new Observer("admin1"); Observer observer2 = new Observer("admin2"); Observer observer3 = new Observer("admin2"); subject.AddObserver(observer1); subject.AddObserver(observer2); subject.AddObserver(observer3); subject.NotifyAllObserver("Hello"); }}4.输出
add observer wiht name: admin1add observer wiht name: admin2add observer wiht name: admin2HelloHelloHello总结:
可以在观察者和订阅者的基础上抽提出抽象类,然后发布的事件也可以抽提出接口,从而演化出更为复杂的观察者模式。
转载地址:http://ylsbb.baihongyu.com/