属于行为型模式(共11种)
事件处理模型
类图:
observer 本质上是个 钩子函数(可以将方法作为参数传进去) 事件发生了自动执行
数据源对象 中聚合一个 observer列表 、一个触发事件的方法 (新建事件、具体的事件 传给observer)
observer接口 中有对事件处理的方法 传入 event事件
Event事件中 聚合事件源对象 getSource (方便拿到事件源,调用事件源对象本身的方法)
具体的observer 实现观察者接口 重写其中的事件处理方法
代码举例:
/*** 有很多时候,观察者需要根据事件的具体情况来进行处理* 大多数时候,我们处理事件的时候,需要事件源对象* 事件也可以形成继承体系*///事件源class Child {private boolean cry = false;private List<Observer> observers = new ArrayList<>();{observers.add(new Dad());observers.add(new Mum());observers.add(new Dog());observers.add((e)->{System.out.println("ppp");});//hook callback function}public boolean isCry() {return cry;}public void wakeUp() {cry = true;wakeUpEvent event = new wakeUpEvent(System.currentTimeMillis(), "bed", this);for(Observer o : observers) {o.actionOnWakeUp(event);}}}//事件abstract class Event<T> {abstract T getSource();}//具体事件class wakeUpEvent extends Event<Child>{long timestamp;String loc;Child source;public wakeUpEvent(long timestamp, String loc, Child source) {this.timestamp = timestamp;this.loc = loc;this.source = source;}@OverrideChild getSource() {return source;}}//观察者interface Observer {void actionOnWakeUp(wakeUpEvent event);}//具体观察者class Dad implements Observer {public void feed() {System.out.println("dad feeding...");}@Overridepublic void actionOnWakeUp(wakeUpEvent event) {feed();}}class Mum implements Observer {public void hug() {System.out.println("mum hugging...");}@Overridepublic void actionOnWakeUp(wakeUpEvent event) {hug();}}class Dog implements Observer {public void wang() {System.out.println("dog wang...");}@Overridepublic void actionOnWakeUp(wakeUpEvent event) {wang();}}//模拟调用public class Main {public static void main(String[] args) {Child c = new Child();//do sthc.wakeUp();}}


