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

观察者模式

时间:2015-03-14 11:07:55      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:设计模式   观察者模式   

观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。
观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的独享都得到通知并自动刷新。
package mode.observer.final_;

/**
 * 
 * 创建被观察者的接口,规定要实现的方法
 * 
 * */
public interface Subject {
	/* 增加观察者 */
	public void add(Observer observer);

	/* 删除观察者 */
	public void del(Observer observer);

	/* 通知所有的观察者 */
	public void notifyObservers();

	/* 自己的操作 */
	public void operation();
}

package mode.observer.final_;

import java.util.Enumeration;
import java.util.Vector;

/**
 * 
 * 实现一个抽象的被观察者,用来实现那些所有的被观察者所共有的方法,属性
 * 
 * */
public abstract class AbstractSubject implements Subject {

	private Vector<Observer> vector = new Vector<Observer>();

	@Override
	public void add(Observer observer) {
		vector.add(observer);

	}

	@Override
	public void del(Observer observer) {
		vector.remove(observer);
	}

	@Override
	public void notifyObservers() {
		Enumeration<Observer> enumo = vector.elements();
		while (enumo.hasMoreElements()) {
			enumo.nextElement().update();
		}

	}
}

package mode.observer.final_;

public class MySubject extends AbstractSubject {

	@Override
	public void operation() {
		System.out.println("update self");
		//完成操作后要主动去通知观察者
		notifyObservers();
	}

}

package mode.observer.final_;

/*观察者接口,规定所有观察者都要实现update方法*/
public interface Observer {
	public void update();
}

两个具体的观察者
package mode.observer.final_;

public class Observer1 implements Observer {

	@Override
	public void update() {
		System.out.println("Observer1 has received the message !");
	}

}

package mode.observer.final_;

public class Observer2 implements Observer {

	@Override
	public void update() {
		System.out.println("Observer2 has received the message !");
	}

}

测试
package mode.observer.final_;

public class Test {
	public static void main(String[] args) {
		Subject sub = new MySubject();
		sub.add(new Observer1());
		sub.add(new Observer2());

		sub.operation();
	}
}



观察者模式

标签:设计模式   观察者模式   

原文地址:http://blog.csdn.net/u012613903/article/details/44256913

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