Observer 观察者模式:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。
实例:(马老师视频讲解实例)模拟孩子醒了就会哭,哭的话就会触发爸爸妈妈喂他的事件
public interface Observer { //观察者接口,如果观察对象触发了,执行下面的方法
void actionOnWakeUp(wakeUpEvent event);
}
class Child{ //被观察对象 (孩子醒了wakeUp会触发事件, 在醒的方法里执行事件event)
private boolean cry = false;
private List<Observer> observers = new ArrayList<>();
{
observers.add(new Dad());
observers.add(new Mum());
}
public boolean isCry(){
return cry;
}
public void wakeUp(){ //醒了,触发事件
cry = true;
wakeUpEvent event = new wakeUpEvent(System.currentTimeMillis(), "bed", this);
for (Observer observer : observers){
observer.actionOnWakeUp(event);
}
}
// 测试
public static void main(String[] args) {
Child c = new Child();
c.wakeUp();
/* 执行结果
dad feeding....
Mum feeding....
*/
}
}
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;
}
@Override
Child getSource() {
return source;
}
}
class Dad implements Observer{
public void feed(){
System.out.println("dad feeding....");
}
@Override
public void actionOnWakeUp(wakeUpEvent event){
feed();
}
}
class Mum implements Observer{
public void feed(){
System.out.println("Mum feeding....");
}
@Override
public void actionOnWakeUp(wakeUpEvent event){
feed();
}
}
观察者图: