import java.util.ArrayList;
import java.util.List;
/**
* 观察者模式。
* @author Bright Lee
*/
public class ObserverPattern {
public static void main(String[] args) {
Subject subject = new AnimalKeeper(); // 饲养员(主题)
Observer tiger = new Tiger(); // 老虎
Observer bear = new Bear(); // 狗熊
Observer fox = new Fox(); // 狐狸
subject.registerObserver(tiger); // 把老虎设为观察者
subject.registerObserver(bear); // 把狗熊设为观察者
subject.registerObserver(fox); // 把狐狸设为观察者
subject.notifyObservers(); // 饲养员通知所有观察者
System.out.println("==================");
subject.removeObserver(bear); // 把狗熊从观察者名单中移除
subject.notifyObservers(); // 饲养员再次通知所有观察者
}
}
interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
class AnimalKeeper implements Subject {
private List<Observer> observers = new ArrayList<Observer>();
public void registerObserver(Observer observer) {
observers.add(observer);
}
public void removeObserver(Observer observer) {
observers.remove(observer);
}
public void notifyObservers() {
for (Observer observer : observers) {
observer.update();
}
}
}
interface Observer {
void update();
}
class Tiger implements Observer {
public void update() {
System.out.println("老虎收到了通知。");
}
}
class Bear implements Observer {
public void update() {
System.out.println("狗熊收到了通知。");
}
}
class Fox implements Observer {
public void update() {
System.out.println("狐狸收到了通知。");
}
}
打印结果如下:
老虎收到了通知。
狗熊收到了通知。
狐狸收到了通知。
==================
老虎收到了通知。
狐狸收到了通知。