zoukankan      html  css  js  c++  java
  • C#_观察者模式

    假设有一个软件公司,每当有新产品推出,就把信息通知到一些客户。

    把通知这个动作抽象成一个接口。

        public interface IService
    
        {
    
            void Notif();
    
        }

    客户如果想获得通知,就需要实现以上的接口。这里的客户被看作是观察者。

        public class CustomerA : IService
    
        {       
    
            public void Notif()
    
            {
    
                Console.WriteLine("客户A收到通知了~~");
    
            }
    
        }
    
    
    
        public class CustomerB : IService
    
        {
    
            public void Notif()
    
            {
    
                Console.WriteLine("客户B收到通知了~~");
    
            }
    
        }
    

    作为软件公司来讲,维护着一个客户的集合,并提供注册、取消注册的方法,往这个集合添加或删除客户。每当有通知的时候,就遍历客户集合,让IService执行通知。软件公司可以看作是一个被观察对象,或者说是发起动作的源头。

        public class MyCompany
    
        {
    
            private IList<IService> subscribers = new List<IService>();
    
    
    
            public void Subscribe(IService subscriber)
    
            {
    
                subscribers.Add(subscriber);
    
            }
    
    
    
            public void CancelSubscribe(IService subscriber)
    
            {
    
                subscribers.Remove(subscriber);
    
            }
    
    
    
            public void SendMsg()
    
            {
    
                foreach (IService service in subscribers)
    
                {
    
                    service.Notif();
    
                }
    
            }
    
        }
    

    客户端创建软件公司实例、创建观察者实例、注册或取消观察者等。

        class Program
    
        {
    
            static void Main(string[] args)
    
            {
    
                MyCompany company = new MyCompany();
    
    
    
                IService customerA = new CustomerA();
    
                IService customerB = new CustomerB();
    
    
    
                company.Subscribe(customerA);
    
                company.Subscribe(customerB);
    
    
    
                company.SendMsg();
    
                Console.ReadKey();
    
            }
    
        }
    

    总结:

    ● 把一个通知的动作抽象成接口
    ● 观察者如果想接收到通知,就实现通知接口
    ● 被观察对象做3件事情:维护观察者的集合,注册/取消观察者,发起动作遍历观察者集合让通知接口来做事
            

  • 相关阅读:
    统计nginx日志里访问次数最多的前十个IP
    while 格式化输出 运算符 字符编码
    Python 软件安装
    Python 基础
    Typora 基础的使用方法
    Django ORM (四) annotate,F,Q 查询
    Django 惰性机制
    Django ORM (三) 查询,删除,更新操作
    Django ORM (二) 增加操作
    Django ORM (一) 创建数据库和模型常用的字段类型参数及Field 重要参数介绍
  • 原文地址:https://www.cnblogs.com/ingstyle/p/4081147.html
Copyright © 2011-2022 走看看