观察者模式

Posted by Lazy on July 1, 2016

##观察者模式

  • 当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!

定义一个接口

public interface Observer {
	public void update();
}

定义两个实现类,也就是订阅者

public class Observer1 implements Observer {

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

public class Observer2 implements Observer {

	@Override
	public void update() {
		System.out.println("observer2 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();
	}

}