zoukankan      html  css  js  c++  java
  • 设计模式》观察者模式

    例子

    教会(Subject)
    教会成员(Observer)

    public class GuildSubject
        {
            private List<AbsSubscriber<GuildSubject>> _subscribers;
    
            public GuildSubject(string guildName)
            {
                GuildName = guildName;
                _subscribers = new List<AbsSubscriber<GuildSubject>>();
            }
    
            public void AddObserver(AbsSubscriber<GuildSubject> obj)
            {
                _subscribers.Add(obj);
            }
    
            public void RemoveObserver(AbsSubscriber<GuildSubject> obj)
            {
                _subscribers.Remove(obj);
            }
    
            public void SendData(string data)
            {
                foreach (var subscriber in _subscribers)
                {
                    subscriber.ReceiveData(this, data);
                }
            }
    
    
            public string GuildName { get; }
        }
    
        public interface IObserver<Subject>
        {
            void ReceiveData(Subject subject, string data);
        }
    
        public abstract class AbsSubscriber<Subject> : IObserver<Subject>
        {
            public AbsSubscriber(string name)
            {
                Name = name;
            }
    
            public string Name { get; }
    
            public abstract void ReceiveData(Subject subject, string data);
        }
    
        public class GuildSubscriber : AbsSubscriber<GuildSubject>
        {
            public GuildSubscriber(string name) : base(name)
            {
            }
    
            public override void ReceiveData(GuildSubject subject, string data)
            {
                Console.WriteLine($"{this.Name}收到{subject.GuildName}教会的消息:{data}");
            }
        }
    
            private static void SubjectTest()
            {
                var guildSubject = new GuildSubject("牛逼教会");
    
                guildSubject.AddObserver(new GuildSubscriber("信徒1"));
                guildSubject.AddObserver(new GuildSubscriber("信徒2"));
                guildSubject.AddObserver(new GuildSubscriber("信徒3"));
    
                guildSubject.SendData("牛逼起来啦");
            }
    
    
  • 相关阅读:
    FPGA 设计怎样进行面积优化(逻辑资源占用量优化)
    实现文件下载的java代码
    java推断字符串是否为乱码
    cocos2dx 制作单机麻将(二)
    CPU 风扇清理灰尘加油全过程图解
    初识 Cloudera Impala
    怎样设计接口?
    Android ViewPager使用具体解释
    php反射类 ReflectionClass
    memwatch的使用
  • 原文地址:https://www.cnblogs.com/icxldd/p/15804205.html
Copyright © 2011-2022 走看看