码迷,mamicode.com
首页 > 其他好文 > 详细

Observer Design Pattern(观察者模式)

时间:2015-08-11 07:23:28      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

观察者模式,顾名思义,是对象或者线程对某一对象或者线程进行持续性的关注,一旦被关注的对象或线程发生任何改变,能够及时的通知观察者,已做出正确的应对。

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!