概念
觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。
主題對象維護一個存儲所有觀察者對象的集合,主動向觀察者對象發送消息。
代碼
抽象通知者
public interface Subject {
void addMonster(Monster monster);
void notifyMonster();
}
抽象的觀察者
public abstract class Observer {
protected String name;
public abstract void respond (String response);
}
具體的觀察者
public abstract class Observer {
protected String name;
public abstract void respond (String response);
}
具體的通知者
import java.util.ArrayList;
import java.util.List;
public class Reporter implements Subject {
private List<Monster> monsters = new ArrayList<>();
@Override
public void addMonster(Monster monster) {
monsters.add(monster);
}
@Override
public void notifyMonster() {
for (Monster monster : monsters) {
monster.respond("唐僧來了");
}
}
}
客戶端
public class Client {
public static void main(String[] args) {
Monster huangPao = new Monster("黃袍怪");
Monster heiXiong = new Monster("黑熊精");
Reporter reporter = new Reporter();
reporter.addMonster(huangPao);
reporter.addMonster(heiXiong);
reporter.notifyMonster();
}
}