首页 > 其他 > 详细

设计模式-----观察者模式

时间:2014-06-14 09:53:39      阅读:350      评论:0      收藏:0      [点我收藏+]

定义了对象之间的一对多依赖,这样一来,当一个对象状态改变时,他的所有依赖者都会收到通知并自动更新。


观察者模式的组成:


抽象主题角色:把所有对观察者对象的引用保存在一个集合中。抽象主题提供一个接口,可以增加和删除观察者角色。

具体主题角色:在具体主题内部状态改变时,给所有登记过的观察者发出通知。


抽象观察者角色为所有具体的观察者定义一个接口,在得到主题的通知时更新自己

具体观察者角色:该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。


观察者模式UML图:

bubuko.com,布布扣

观察者模式示例代码:

主题接口类 Subject.java

public interface Subject {
	public void addObserver(Observer observer);

	public void removeObserver(Observer observer);

	public void notifyObservers(String str);
}

具体主题类(可以实现多个) ConcreteSubject.java

import java.util.ArrayList;

public class ConcreteSubject implements Subject {
	ArrayList<Observer> observers = new ArrayList<Observer>();

	public void addObserver(Observer observer) {
		observers.add(observer);
	}

	public void removeObserver(Observer observer) {
		observers.remove(observer);
	}

	@Override
	public void notifyObservers(String str) {
		//通知所有观察者
		for (Observer o : observers) {
			o.update(str);
		}
	}
}


观察者接口类 Observer.java

public interface Observer {
	public void update(String str);
}


具体观察者类(可以实现多个)ConcreteObserver.java

public class ConcreteObserver implements Observer {

	@Override
	public void update(String str) {
		System.out.println("通知了observer--》 " + str);
	}
}

测试类 Test.java

/**
 * 测试观察者模式
 * 
 * @author neng
 * 
 */
public class Test {

	public static void main(String[] args) {
		// 只要是实现接口的观察者与主题即可. 多对多
		ConcreteObserver observer1 = new ConcreteObserver();
		ConcreteObserver observer2 = new ConcreteObserver();

		ConcreteSubject concreteSubject1 = new ConcreteSubject();

		concreteSubject1.addObserver(observer1);
		concreteSubject1.addObserver(observer2);
		concreteSubject1.notifyObservers("这个是消息!!!!");

		concreteSubject1.removeObserver(observer2);
		concreteSubject1.notifyObservers("命令!!");
	}

}

观察者模式用途:

Android,ios中的Notification即用观察者模式实现。
Java中的事件监听也用观察者模式实现。

多个对象(一对多,多对多)之间通讯可以用观察者模式,主题和观察者之间的耦合度非常低,可拓展性很强!


转载请注明出处:http://blog.csdn.net/xn4545945  



设计模式-----观察者模式,布布扣,bubuko.com

设计模式-----观察者模式

原文:http://blog.csdn.net/xn4545945/article/details/30551117

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!