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

观察者模式

时间:2023-06-06 11:22:16浏览次数:45  
标签:publisher Handle 订阅 观察者 模式 Subscriber OnPublish public

一、定义

多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

二、示例

下面用委托、事件, 实现观察者模式

1.Publisher.cs

    // 定义发布者
    public class Publisher
    {
        // 声明事件
        public event EventHandler OnPublish;

        public void Publish()
        {
            Console.WriteLine("发布了一条消息");
            // 触发事件
            OnPublish?.Invoke(this, EventArgs.Empty);
        }
    }

2.Subscriber.cs

    // 定义订阅者
    public class Subscriber
    {
        public string Name { get; }

        public Subscriber(string name)
        {
            Name = name;
        }

        // 定义事件处理程序
        public void Handle(object sender, EventArgs args)
        {
            Console.WriteLine($"{Name} 收到了一条消息");
        }
    }

3.Program.cs

 internal class Program
    {
        static void Main(string[] args)
        {
            var publisher = new Publisher();

            // 创建三个订阅者
            var subscriber1 = new Subscriber("订阅者1");
            var subscriber2 = new Subscriber("订阅者2");
            var subscriber3 = new Subscriber("订阅者3");

            // 将订阅者添加到发布者的订阅列表中
            publisher.OnPublish += subscriber1.Handle;
            publisher.OnPublish += subscriber2.Handle;
            publisher.OnPublish += subscriber3.Handle;

            // 发布一条消息
            publisher.Publish();

            // 将订阅者从发布者的订阅列表中移除
            publisher.OnPublish -= subscriber2.Handle;

            // 再次发布一条消息
            publisher.Publish();
        }
    }

运行结果:

 

标签:publisher,Handle,订阅,观察者,模式,Subscriber,OnPublish,public
From: https://www.cnblogs.com/xiao-wo-niu/p/17460013.html

相关文章

  • 【Java】再谈Springboot 策略模式
     第一次使用策略模式是一年前的一个项目:https://www.cnblogs.com/mindzone/p/16046538.html当时还不知道Spring支持集合类型的自动装配在最近一个项目,我发现很多业务需要频繁的使用这种模式去聚合代码 一、牛刀小试这是最开始的定义策略的业务接口/***业务推送管......
  • C++设计模式:观察者模式
    观察者模式又叫做发布-订阅模式;观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动的更新自己。有两大类(主题和观察者)一共四个角色从上面我们可以看到,这里面包含了:(1)抽象主题/抽象......
  • Taro框架应用优势下的移动App开发创新模式
    最近公司的一些项目需要跨端框架,技术老大选了Taro,实践了一段时间下来,愈发觉得Taro是个好东西,所以在本篇文章中稍微介绍下。 什么是Taro?Taro(或称为Taro框架)是一种用于构建跨平台应用程序的开源JavaScript框架。它基于React和ReactNative,可以用于开发Web、iOS、Android和微......
  • 多种工厂模式的运用
    目录一、简单工厂模式(非23种设计模式)1.1结构2.2实现2.2.1简单工厂类图2.2.2代码2.2.3优缺点二、静态工厂模式(非23种设计模式)3.1代码三、工厂模式3.1结构3.2实现3.2.1工厂模式类图3.2.2代码3.2.3优缺点四、抽象工厂模式4.1结构4.2实现4.2.1抽象工厂模式类图4.2.2代码......
  • 【解决方法】网络设备使用CLI命令行模式进入SSH登录,如交换机,路由器
    环境:工具:锐捷EVE模拟器,VMwareWorkstationPro远程工具:SecureCRT系统版本:Windows10问题描述:描述:在实验使用路由器远程SSH登录交换机时,无法连接,一直提示:%Unrecognizedhostoraddress,orprotocolnotrunning.提示:若按照教程还是无法完成操作,可以进入右侧的企鹅,......
  • C++设计模式:单例模式
    什么是单例模式?单例模式指在整个系统生命周期里,保证一个类只能产生一个实例,确保该类的唯一性。单例模式分类有哪些?单例模式可以分为懒汉式和饿汉式,两者之间的区别在于创建实例的时间不同:懒汉式:指系统运行中,实例并不存在,只有当需要使用该实例时,才会去创建并使用实例。(这种方式要考......
  • 12、Keepalived解决LVS的高可用问题(双主双业务模式)并开启sorry server和持久连接
    Keepalived解决LVS的高可用问题(双主双业务模式)再安装两台web服务器7、17并配置好页面[root@ubuntu2004~]#echoweb1.meng.com`hostname-I`>/var/www/html/index.html[root@ubuntu2004~]#echoweb2.meng.com`hostname-I`>/var/www/html/index.html测试页面内容[root@r......
  • C#设计模式19——装饰器模式的写法
    装饰器模式(DecoratorPattern)是一种结构型设计模式,它允许你动态地给一个对象添加一些额外的职责,而不需要修改这个对象的代码。What(什么)装饰器模式是一种结构型设计模式,它允许你动态地给一个对象添加一些额外的职责,而不需要修改这个对象的代码。在装饰器模式中,你可以定义一个装......
  • 使用c#实现23种常见的设计模式
    使用c#实现23种常见的设计模式设计模式通常分为三个主要类别:创建型模式结构型模式行为型模式。这些模式是用于解决常见的对象导向设计问题的最佳实践。以下是23种常见的设计模式并且提供c#代码案例:创建型模式:1.单例模式(Singleton)publicsealedclassSingleton......
  • Java建造者模式,用代码体验LEGO的快乐
    前言本文主要讲述Java设计模式中的建造者模式,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。一.什么是建造者模式建造者模式是23种设计模式中创建型模式的一种,它关注的是对象创建的步骤,将一个复杂的对象抽象出来,一步步地把一个复杂的对象创建出来。......