标签:
观察者模式,顾名思义,是对象或者线程对某一对象或者线程进行持续性的关注,一旦被关注的对象或线程发生任何改变,能够及时的通知观察者,已做出正确的应对。
观察者模式在开发中非常常见,诸如某些管理系统,或者电子商务系统,创造观察者线程对需要关注的线程进行关注,一旦某种事件发生,则可以通知观察者做出反应。比如某工厂的生产管理系统,一旦某些重要指标超过警戒线,需要及时的通知观察者线程,可以依据不同的问题状况构建不同的观察者,不同的观察者可以以不同的方式或渠道通知用户,比如发送短信,发送邮件,推送手机APP消息等,避免生产事故的发生。
下面是观察者模式的简单例子,本例子仅仅是为了体现观察者模式的核心思想,故比较简单:
package dp.observer; public interface Subject { public void register(Observer obj); public void unregister(Observer obj); public void notifyObservers(); }
package dp.observer; import java.util.ArrayList; import java.util.List; public class MyTopic implements Subject { private List<Observer> observers; private String messageString = "服务器通知"; public MyTopic() { this.observers = new ArrayList<>(); } @Override public void register(Observer obj) { if (!observers.contains(obj)) observers.add(obj); } @Override public void unregister(Observer obj) { observers.remove(obj); } @Override public void notifyObservers() { for (Observer obj : this.observers) { obj.update(messageString + ", 发生时间:" + System.currentTimeMillis()); } } }
package dp.observer; public interface Observer { public void update(String message); public void setSubject(Subject sub); }
package dp.observer; public class MyTopicSubscriber implements Observer { private String name; private Subject topic; public MyTopicSubscriber(String nm){ this.name=nm; } @Override public void update(String message) { System.out.println(name+" 收到来自服务器的信息:"+message); } @Override public void setSubject(Subject sub) { this.topic=sub; } }
package dp.observer; public class Main { public static void main(String[] args) { MyTopic topic = new MyTopic(); Observer obj1 = new MyTopicSubscriber("Observer 1"); Observer obj2 = new MyTopicSubscriber("Observer 2"); Observer obj3 = new MyTopicSubscriber("Observer 3"); topic.register(obj1); topic.register(obj2); topic.register(obj3); obj1.setSubject(topic); obj2.setSubject(topic); obj3.setSubject(topic); topic.notifyObservers(); } }
Observer 1 收到来自服务器的信息:服务器通知, 发生时间:1439225528247 Observer 2 收到来自服务器的信息:服务器通知, 发生时间:1439225528247 Observer 3 收到来自服务器的信息:服务器通知, 发生时间:1439225528247
Observer Design Pattern(观察者模式)
标签:
原文地址:http://my.oschina.net/nox/blog/490444