标签:
观察者模式,顾名思义,是对象或者线程对某一对象或者线程进行持续性的关注,一旦被关注的对象或线程发生任何改变,能够及时的通知观察者,已做出正确的应对。
观察者模式在开发中非常常见,诸如某些管理系统,或者电子商务系统,创造观察者线程对需要关注的线程进行关注,一旦某种事件发生,则可以通知观察者做出反应。比如某工厂的生产管理系统,一旦某些重要指标超过警戒线,需要及时的通知观察者线程,可以依据不同的问题状况构建不同的观察者,不同的观察者可以以不同的方式或渠道通知用户,比如发送短信,发送邮件,推送手机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