观察者模式
观察者模式
参考:
java.awt.event.KeyListener
KeyListener 会根据我们键盘按下抬起触发事件 方法上有封装好的Event类封装了按键时的信息

图解:

Code:
import java.util.ArrayList;
import java.util.List;
//测试
public class Main {
public static void main(String[] args) { new Child().wakeUp();}
}
//抽象获取源对象的类
abstract class Event<T>{
abstract T getSource();
}
//小孩醒的事件类
class WakeupEvent extends Event<Child>{
long timestamp;
String location;
Child source;
public WakeupEvent(long timestamp, String location,Child source) {
this.timestamp = timestamp;
this.location = location;
this.source = source;
}
@Override
Child getSource() {
return source;
}
}
//观察者接口
interface Observer{
void actionOnWakeup(WakeupEvent wakeupEvent);
}
//事件源对象 小孩
class Child{
boolean cry = false;
List<Observer> observerList = new ArrayList<>();
{
observerList.add(new Dad());
observerList.add(new Dog());
}
public void wakeUp(){
System.out.println("child wakeup! wuwuwuwuuwuw...");
cry = true;
for (Observer observer : observerList) {
observer.actionOnWakeup(new WakeupEvent(System.currentTimeMillis(),"bad",this));
}
}
}
//观察者 Dad
class Dad implements Observer {
public void feed(){
System.out.println("Dad feed !!");
}
@Override
public void actionOnWakeup(WakeupEvent wakeupEven) {
//可以拿到是谁发出的事件
Child source = wakeupEven.getSource();
System.out.println("child status: " + source.cry);
feed();
}
}
//观察者Dog
class Dog implements Observer {
public void call(){
System.out.println("Dog wawawaw !!");
}
@Override
public void actionOnWakeup(WakeupEvent wakeupEven) {
call();
}
}

浙公网安备 33010602011771号