设计模式(七)观察者模式

本文详细介绍了观察者模式,包括模式的概念、代码实现示例及实际应用场景。观察者模式允许多个观察者等待被观察者的状态变化,并在触发时进行相应处理。文章通过不断优化的代码版本展示如何抽象观察者和被观察者,强调了观察者根据被观察者状态进行不同处理的重要性。此外,还提及观察者模式可与责任链模式结合,形成执行链路,以及观察者可以同时观察多个被观察者的情况。最后,作者指出钩子函数、回调函数等概念本质上也是观察者模式的应用。
摘要由CSDN通过智能技术生成

观察者模式

解释

多个观察者,等待被观察者触发某个状态,触发则通知观察者,进行处理

代码维度

举例

小朋友哭了要喂吃的…

  • V1 while循环观察等待

  • V2 抽象小朋友对象,根据表示符号判断

  • V3 抽象观察者,根据情况调用观察者

    class Child {
        private boolean cry = false;
        private Dad d = new Dad();
    
        public boolean isCry() {
            return cry;
        }
    
        public void wakeUp() {
            cry = true;
            d.feed();
        }
    }
    
  • V4 加入多个观察者

    class Child {
        private boolean cry = false;
        private Dad dad = new Dad();
        private Mum mum = new Mum();
        private Dog dog = new Dog();
    
    
        public boolean isCry() {
            return cry;
        }
    
        public void wakeUp() {
            cry = true;
            dad.feed();
            dog.wang();
            mum.hug();
        }
    }
    
  • V5 抽象观察者接口

    被观察者内部通过list存储所有观察者,满足条件时通知所有观察者

    class Child {
        private boolean cry = false;
        private List<Observer> observers = new ArrayList<>();
    
        {
            observers.add(new Dad());
            observers.add(new Mum());
            observers.add(new Dog());
        }
    
    
        public boolean isCry() {
            return cry;
        }
    
        public void wakeUp() {
            cry = true;
            for(Observer o : observers) {
                o.actionOnWakeUp();
            }
        }
    }
    
  • V6 实际应用中,一般定义一种事件,满足条件被观察者发出这个事件,观察者根据自己的逻辑对事件进行处理。

    主要是因为观察者根据被观察者的状态需要有不同的处理

    如:小朋友醒来(夜里、白天、床上、床下…)

    class Child {
        private boolean cry = false;
        private List<Observer> observers = new ArrayList<>();
    
        {
            observers.add(new Dad());
            observers.add(new Mum());
            observers.add(new Dog());
        }
    
    
        public boolean isCry() {
            return cry;
        }
    
        public void wakeUp() {
            cry = true;
    
            wakeUpEvent event = new wakeUpEvent(System.currentTimeMillis(), "bed");
    
            for(Observer o : observers) {
                o.actionOnWakeUp(event);
            }
        }
    }
    
    //事件类 fire Event
    class wakeUpEvent{
        long timestamp;
        String loc;
    
        public wakeUpEvent(long timestamp, String loc) {
            this.timestamp = timestamp;
            this.loc = loc;
        }
    }
    

    在这里插入图片描述

  • V7 观察者可以观察多个被观察者,所以需要在事件中添加事件源头参数

    class wakeUpEvent{
        long timestamp;
        String loc;
        Child source;
    
        public wakeUpEvent(long timestamp, String loc, Child source) {
            this.timestamp = timestamp;
            this.loc = loc;
            this.source = source;
        }
    }
    
  • V8 事件添加继承体系

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

知识点

观察者模式通常可以跟责任链模式结合使用

多个观察者可以看作一个链路,通知多个观察者即可以理解为依次执行责任链路

钩子函数、callback、hook、listener其实都是观察者模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的纺织品企业财务管理系统,源码+数据库+毕业论文+视频演示 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升,也为了对纺织品企业财务信息进行更好的维护,纺织品企业财务管理系统的出现就变得水到渠成不可缺少。通过对纺织品企业财务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 纺织品企业财务管理系统通过MySQL数据库与Spring Boot框架进行开发,纺织品企业财务管理系统能够实现对财务人员,员工,收费信息,支出信息,薪资信息,留言信息,报销信息等信息的管理。 通过纺织品企业财务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。 关键字:纺织品企业财务管理系统,薪资信息,报销信息;SpringBoot
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值