观察者模式的定义:
在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。
大白话:
其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。
例如,一个妈妈有两个小孩,小孩在外面玩,妈妈做饭,饭做好了要通知孩子们吃饭。
上代码,先建立被观察者
//被观察者,创建两个小孩实例
public interface ToBeWatcher {
void remind();
}
public class Child1 implements ToBeWatcher {
@Override
public void remind() {
System.out.println("我是小王,我妈叫我吃饭了");
}
}
public class Child2 implements ToBeWatcher {
@Override
public void remind() {
System.out.println("我是小李,我妈叫我吃饭了");
}
}
观察者(妈妈)
public class Watcher {
private ArrayList<ToBeWatcher> children=new ArrayList<>();
void cook(){
System.out.println("我是妈妈,正在做饭-----------");
System.out.println("饭做好了,要叫孩子们吃饭------");
}
//将订阅者(小孩)注册进来
void addChild(ToBeWatcher child){
children.add(child);
}
//发布消息
void remindChild(){
for (ToBeWatcher child : children) {
child.remind();
}
}
}
测试运行结果
public class test {
public static void main(String[] args) {
Child1 child1 = new Child1();
Child2 child2 = new Child2();
Watcher watcher = new Watcher();
watcher.addChild(child1);
watcher.addChild(child2);
watcher.cook();
watcher.remindChild();
}
}
我是妈妈,正在做饭-----------
饭做好了,要叫孩子们吃饭------
我是小王,我妈叫我吃饭了
我是小李,我妈叫我吃饭了