首页 > 其他分享 >手搓观察者模式

手搓观察者模式

时间:2023-04-11 17:26:13浏览次数:36  
标签:credit void 观察者 模式 Credit Override new public

用专业的话来说,是这样的:观察者模式定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。

用我自己的话说是这样的:法外狂徒张三欠了一屁股债,追债人不知道张三什么时候有钱还。但是张三是个很守信用的人,他一有了钱就会去通知追债人去还债。

即张三状态发生变化,相关的依赖对象(追债人)皆会被通知,并且更新~

上代码:

 

 

/**
 * @Author:Nyapii
 */
public class ObserverPattern {
    public static void main(String[] args) {
        Debit zhangSan = new ZhangSan();
        zhangSan.borrow(new Wangwu());
        zhangSan.borrow(new Lisi());
        zhangSan.notifyCredits();
    }
}
interface Debit{
    void borrow(Credit credit);
    void notifyCredits();
}

class ZhangSan implements Debit{

    private List<Credit> allCredits  = new ArrayList<>();
    private Integer state = 0; // 0表示没钱,1表示有钱

    @Override
    public void borrow(Credit credit) {
        allCredits.add(credit);
    }

    @Override
    public void notifyCredits() {
        allCredits.forEach(credit -> credit.takeMoney());
    }
}

interface Credit{
    void takeMoney();
}
class Lisi implements Credit{
    @Override
    public void takeMoney() {
        System.out.println("李四要钱!");
    }
}
class Wangwu implements Credit{
    @Override
    public void takeMoney() {
        System.out.println("王五要钱!");
    }
}
/**
 * @Author:Nyapii
 */
public class ObserverPattern {
    public static void main(String[] args) {
        Debit zhangSan = new ZhangSan();
        zhangSan.borrow(new Wangwu());
        zhangSan.borrow(new Lisi());
        zhangSan.notifyCredits();
    }
}
interface Debit{
    void borrow(Credit credit);
    void notifyCredits();
}

class ZhangSan implements Debit{

    private List<Credit> allCredits  = new ArrayList<>();
    private Integer state = 0; // 0表示没钱,1表示有钱

    @Override
    public void borrow(Credit credit) {
        allCredits.add(credit);
    }

    @Override
    public void notifyCredits() {
        allCredits.forEach(credit -> credit.takeMoney());
    }
}

interface Credit{
    void takeMoney();
}
class Lisi implements Credit{
    @Override
    public void takeMoney() {
        System.out.println("李四要钱!");
    }
}
class Wangwu implements Credit{
    @Override
    public void takeMoney() {
        System.out.println("王五要钱!");
    }
}

运行结果:

 

标签:credit,void,观察者,模式,Credit,Override,new,public
From: https://www.cnblogs.com/Nyapii/p/17306920.html

相关文章

  • ip link add bond0 type bond 几种模式
    在使用命令iplinkaddbond0typebond创建Bond接口时,可以指定不同的Bond模式。常见的Bond模式有以下几种:mode=balance-rr:即Round-robin模式,是默认的Bond模式。在该模式下,数据包会按照轮流分发到不同的物理接口上,从而实现负载均衡。mode=active-backup:即Active......
  • 重学Java设计模式-行为型模式-责任链模式
    重学Java设计模式-行为型模式-责任链模式内容摘自:https://bugstack.cn/md/develop/design-pattern/2020-06-18-重学Java设计模式《实战责任链模式》.html#重学-java-设计模式-实战责任链模式「模拟618电商大促期间-项目上线流程多级负责人审批场景」责任链模式介绍图片来自......
  • .NET Core MongoDB数据仓储和工作单元模式实操
    前言MongoDB从入门到实战的相关教程YyFlight.ToDoList项目源码地址MongoDB事务使用前提说明创建EntityBase公共类添加UserInfo用户表实体映射模型创建用户Repository创建用户管理业务代码UserOperationExample控制创建注册数据库基础操作和工作单元注册相关应用服务......
  • 观察者模式重启线程
    观察者模式重启线程看代码的过程中发现了观察者模式用于重启线程的实例,就顺便研究了一下。观察者模式先引用介绍一下观察者模式:意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其......
  • Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目
    Servlet注解的使用,简化配置以及,使用模板方法设计模式优化oa项目每博一文案有句谚语说:“一怒之下踢石头,只有痛着脚趾头。”比一件糟糕的事情更可拍的,是你用糟糕的态度去面对它。看过一个很有意思的故事:有个男人清早洗漱的时候,把自己的手表放在了桌子上。他的儿子不小心把手表......
  • 中介模式
    概述《设计模式》一书中对于“中介模式”的意图描述如下:用一个中介对象来封装一系列对象的交互。中介者使得各对象之间不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互具体来讲,就是在对象过多,并且这些对象之间的交互关系过于复杂的情况下,通过引入第......
  • 单例模式
    单例模式单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。即:类在内存中只能存在一个示例对象设计思路:创建的对象肯定是要存入内存的,也就是用户态的那片空间(栈、堆、读写段、只读段),如果直接将类对象的创建放在类的外面,无论放在哪块区域都是行不通......
  • 单例模式
    单例模式单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。即:类在内存中只能存在一个示例对象设计思路:创建的对象肯定是要存入内存的,也就是用户态的那片空间(栈、堆、读写段、只读段),如果直接将类对象的创建放在类的外面,无论放在哪块区域都是行不通......
  • KMP算法(串的模式匹配算法)(未完待续......)
    KMP算法的实现1.基本原理  在暴力破解算法(BF算法)中,模式串需要一个一个来跟主串进行对比,若有一个不相同,则主串前进一位,继续从头开始进行比较,这样比较的最坏时间复杂度为O(mn),例:‘aaaaaaaaab’和‘aaab’,需要比较到最后一个才能成功,效率太过低下。  KMP算法的原理是,找到模式串......
  • VMware网络连接模式
    VMware网络连接模式一、桥接模式1.介绍相当于虚拟机的网卡和宿主机的物理网卡连接到虚拟机所提供的VMnet0虚拟交换机上2.作用虚拟机、宿主机均可访问外网虚拟机、宿主机之间可通信3.操作关闭宿主机和虚拟机防火墙Windows:控制面板-->系统和安全-->WindowsDefender......