观察者模式

一、定义

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

二、示例

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

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

运行结果:

 

posted on 2023-06-06 11:15  一只向上爬的小蜗牛  阅读(16)  评论(0编辑  收藏  举报