概念
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
主题对象维护一个存储所有观察者对象的集合,主动向观察者对象发送消息。
代码
抽象通知者
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();
}
}