zoukankan      html  css  js  c++  java
  • 会议室状态订阅(发布-订阅模式)

    发布者接口

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

    效果

  • 相关阅读:
    (原创)c#学习笔记10--定义类成员01--成员定义06--自动属性
    (原创)c#学习笔记10--定义类成员01--成员定义03--定义属性
    (原创)c#学习笔记10--定义类成员01--成员定义02--建立方法
    【BZOJ3110】K大数查询(ZJOI2013)-整体二分+线段树
    【BZOJ3110】K大数查询(ZJOI2013)-整体二分+线段树
    【HDU5412】CRB and Queries-整体二分:带修改区间第K小
    【HDU5412】CRB and Queries-整体二分:带修改区间第K小
    【NOI2007T2】货币兑换-DP斜率优化+CDQ分治
    【NOI2007T2】货币兑换-DP斜率优化+CDQ分治
    【BZOJ3295】动态逆序对(CQOI2011)-CDQ分治:三维偏序
  • 原文地址:https://www.cnblogs.com/microsoft-xin/p/9889427.html
Copyright © 2011-2022 走看看