二十三种设计模式之:(七)观察者模式

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();
    }
}

观察者图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值