以下demo 含义:
如果小孩儿哭了,父母需要做出反应,所以父母需要监视小孩哭的动作。
比如有个app,父母在app订阅,小孩哭这个动作会推送一个消息。父母接收到了这个消息作出反应。
@Data
public class Event {
private int msg;
}
public class Child {
public void cry(int message) {
System.out.println("小孩醒了");
Event event = new Event();
event.setMsg(message);
// 小孩哭了向app推送消息
ObserverListenerUtil.pushEvent(event);
}
}
// 监听者接口
public interface ObserverListener {
void doSomeThing(Event event);
}
// 父亲监听后实现
public class Dad implements ObserverListener {
@Override
public void doSomeThing(Event event) {
if (event.getMsg() == 1) {
System.out.println("dad feeds");
}
}
}
// 母亲监听后实现
public class Mom implements ObserverListener {
@Override
public void doSomeThing(Event event) {
if (event.getMsg() == 2) {
System.out.println("mom feeds");
}
}
}
// app ,收集所有订阅消息的监听者
public class ObserverListenerUtil {
static List<ObserverListener> listenerList = Lists.newArrayList();
public static void register(ObserverListener observerListener) {
listenerList.add(observerListener);
}
// 向每个监听者推送消息
public static void pushEvent(Event event) {
listenerList.stream().forEach(item -> item.doSomeThing(event));
}
}
//测试demo
public class ObserverDemo {
public static void main(String[] args) {
ObserverListenerUtil.register(new Dad());
ObserverListenerUtil.register(new Mom());
Child child = new Child();
child.cry(1);
System.out.println("----");
child.cry(2);
child.cry(1);
}
}