dtcms 模板下载 私有变量 css winforms mvvm routes Movejs vue自定义事件 vue案例 支付网站建设 jquery绑定click事件 jquery查找子元素 jquery获取元素 bootstrap侧边栏 bootstrap时间轴 bentley软件介绍 mysql转字符串 js原生点击事件 mysql将时间戳转换成日期 pythoninput python关键字 python怎么下载安装 java入门编程 java数组添加 java中的继承 java时间类型 java中的集合 java方法的调用 java数据类型转换 linux教程 内存整理软件 1660ti 完美手游模拟器 eml文件阅读器下载 iframe跨域 平面设计软件下载 淘宝店铺采集 flushdns dnf卡邮件 苹果电脑数据恢复
当前位置: 首页 > 学习教程  > 编程语言

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

2021/2/13 17:27:29 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

Observer 观察者模式:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。 实例:&#…

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

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


本文链接: http://www.dtmao.cc/news_show_700155.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?