`

观察者模式

阅读更多
public interface Observer {
	public void update();
}

public class Observer1 implements Observer {
	@Override
	public void update() {
		System.out.println("observer1 has received!");
	}
}

public interface Subject {	
	/*增加观察者*/
	public void add(Observer observer);	
	/*删除观察者*/
	public void del(Observer observer);	
	/*通知所有的观察者*/
	public void notifyObservers();	
	/*自身的操作*/
	public void operation();
}

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();
		}
	}
}

public class MySubject extends AbstractSubject {
	@Override
	public void operation() {
		System.out.println("update self!");
		notifyObservers();
	}

}

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

}

输出:

update self!
observer1 has received!
observer2 has received!

这些东西,其实不难,只是有些抽象,不太容易整体理解,建议读者:根据关系图,新建项目,自己写代码(或者参考我的代码),按照总体思路走一遍,这样才能体会它的思想,理解起来容易!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics