• 会议室状态订阅(发布-订阅模式)


    发布者接口

        public interface IMeetingRoom
        {
            void AddPerson(IPerson person);
            void RemovePerson(IPerson person);
            void NotifyPerson();
        }

    订阅者接口

        public interface IPerson
        {
         void SubscibeMeetingRoom(); void CancleSubscibeMeetingRoom(); void PrintMeetingRoomMessage(string meetingRoomPublishMessage); }

    发布者实现

       public class MeetingRoom : IMeetingRoom
        {
            private List<IPerson> PersonList = new List<IPerson>();
            private string meetingRoomMessage;
    
            public void AddPerson(IPerson person)
            {
                PersonList.Add(person);
            }
    
            public void NotifyPerson()
            {
                foreach(IPerson person in PersonList)
                {
                    person.PrintMeetingRoomMessage(meetingRoomMessage);
                }
            }
    
            public void RemovePerson(IPerson person)
            {
                if(PersonList.Contains(person))
                {
                    PersonList.Remove(person);
                }
            }
    
            public void PublishMeetingRoomStatus(bool enabled)
            {
                string strStatus = "不可用";
                if(enabled)
                {
                    strStatus = "可用";
                }
    
                meetingRoomMessage = $"当前会议室{strStatus}";
                NotifyPerson();
            }
        }

    订阅者实现

       public class PM : IPerson
        {
            private string PersonName { get; set; }
            private IMeetingRoom MeetingRoom { get; set; }
    
            public PM(string PMName, IMeetingRoom meetingRoom)
            {
                this.PersonName = PMName;
                this.MeetingRoom = meetingRoom;
                
            }
    
            public void PrintMeetingRoomMessage(string meetingRoomPublishMessage)
            {
                Console.WriteLine($"PM - {PersonName} : {meetingRoomPublishMessage}");
            }
    
            public void SubscibeMeetingRoom()
            {
                MeetingRoom.AddPerson(this);
            }
    
            public void CancleSubscibeMeetingRoom()
            {
                MeetingRoom.RemovePerson(this);
            }
        }
       public class Engineer : IPerson
        {
            private string PersonName { get; set; }
            private IMeetingRoom MeetingRoom { get; set; }
    
            public Engineer(string engineerName, IMeetingRoom meetingRoom)
            {
                this.PersonName = engineerName;
                this.MeetingRoom = meetingRoom;
            }
    
            public void PrintMeetingRoomMessage(string meetingRoomPublishMessage)
            {
                Console.WriteLine($"Engineer - {PersonName} : {meetingRoomPublishMessage}");
            }
    
            public void SubscibeMeetingRoom()
            {
                MeetingRoom.AddPerson(this);
            }
    
            public void CancleSubscibeMeetingRoom()
            {
                MeetingRoom.RemovePerson(this);
            }
        }

    代码测试

            public static void Test()
            {
                MeetingRoom meetingRoom = new MeetingRoom();
                IPerson person1 = new PM("张总", meetingRoom);
                IPerson person2 = new PM("李总", meetingRoom);
                IPerson person3 = new PM("李工", meetingRoom);
                IPerson person4 = new PM("张工", meetingRoom);
                person1.SubscibeMeetingRoom();
    
                int num = 0;
                bool status = false;
                while (num < 6)
                {
                    if (num % 2 == 0)
                    {
                        status = true;
                    }
                    else
                    {
                        status = false;
                    }
    
                    meetingRoom.PublishMeetingRoomStatus(status);
    
                    num++;
                    Console.WriteLine(num);
                    if (num == 2)
                    {
                        person2.SubscibeMeetingRoom();
                    }
    
                    if (num == 3)
                    {
                        person3.SubscibeMeetingRoom();
                    }
    
                    if (num == 4)
                    {
                        person4.SubscibeMeetingRoom();
                    }
                }
    
                Console.ReadKey();
            }

    效果

  • 相关阅读:
    【PHP框架CodeIgniter学习】使用辅助函数—建立自己的JSONHelper
    mysql将字符转换成数字
    ***微信浏览器禁止app下载链接怎么办
    十分钟帮你拿到500万天使轮!手把手教你写商业计划书【干货】
    ***PHP各种编码的汉字字符串截取
    Nginx与Redis解决高并发问题
    hrtimer的简单使用 + 原理和实现【转】
    2.6 内核中的计时器和列表【转】
    Linux输入子系统:多点触控协议 -- multi-touch-protocol.txt【转】
    kthread_create与kernel_thread的区别【栈】
  • 原文地址:https://www.cnblogs.com/microsoft-xin/p/9889427.html
Copyright © 2020-2023  润新知