// 抽象主题角色,watched:被观察
public interface Watched {
public void addWatcher(Watcher watcher);//添加一个观察者
public void removeWatcher(Watcher watcher);//删除一个观察者
public void notifyWatchers(String str);//唤醒所有的观察者
}
接口2 观察者 当发现主题有什么 变换时他的update方法会被调用
// 抽象观察者角色 Watcher:观察者
public interface Watcher {
public void update(String str);//被唤醒后进行一些逻辑处理
}
实现接口类1 观察者的实现类 其中实现了观察者接口
// 具体的观察者
public class ConcreteWatcher implements Watcher {
@Override
public void update(String str) {
//观察者进行逻辑处理
System.out.println(str);
}
}
实现接口类2 实现被观察者接口
import java.util.ArrayList;
import java.util.List;
// 被观察者 主题
public class ConcreteWatched implements Watched {
// 存放观察者 一个被观察者中存在多个观察者 所有需要一个集合
private List<Watcher> list = new ArrayList<Watcher>();
@Override
public void addWatcher(Watcher watcher) {
list.add(watcher);
}
@Override
public void removeWatcher(Watcher watcher) {
list.remove(watcher);
}
@Override
public void notifyWatchers(String str) {
// 自动调用实际上是主题进行调用的
for (Watcher watcher : list) {
watcher.update(str);
}
}
}
测试主方法
public class TestMain {
public static void main(String[] args) {
Watched girl = new ConcreteWatched(); 创建一个被观察者
//该被观察者存在多个观察者
Watcher watcher1 = new ConcreteWatcher();
Watcher watcher2 = new ConcreteWatcher();
Watcher watcher3 = new ConcreteWatcher();
//将多个观察者 存放至被观察者对象集合内
girl.addWatcher(watcher1);
girl.addWatcher(watcher2);
girl.addWatcher(watcher3);
//唤醒当前被观察者内的所有的观察者
girl.notifyWatchers("开心");
}
}