zoukankan      html  css  js  c++  java
  • 设计模式》责任链模式

    例子 责任链 教会(同工,管理员,创建者)

    • 修改教会成员名称(同工)
    • 去教会祷告请假(管理员)
    • 教会关门,隐退(创建者)
        public abstract class AbsGuildManager
        {
            private string _name;
            protected AbsGuildManager SuperiorGuildManager { get; }
    
    
            protected AbsGuildManager(string name, AbsGuildManager superiorGuildManager)
            {
                _name = name;
                SuperiorGuildManager = superiorGuildManager;
            }
    
            public abstract void HandlerRequest(GuildRequest request);
        }
    
    
    
        public enum GuildRequestType
        {
            改名称,
            请假,
            关门
        }
    
        public class GuildRequest
        {
            public Guid UserId { get; }
            public GuildRequestType GuildRequestType { get; }
    
            public GuildRequest(GuildRequestType guildRequestType, Guid userId)
            {
                GuildRequestType = guildRequestType;
                UserId = userId;
            }
        }
    
        public class TongGongGuildManager : AbsGuildManager
        {
            public TongGongGuildManager(string name, AbsGuildManager superiorGuildManager) : base(name,
                superiorGuildManager)
            {
            }
    
            public override void HandlerRequest(GuildRequest request)
            {
                if (request.GuildRequestType == GuildRequestType.改名称)
                {
                    Console.WriteLine($"同工同意:{request.UserId}修改名字成功");
                }
                else
                {
                    SuperiorGuildManager?.HandlerRequest(request);
                }
            }
        }
    
        public class AdminGuildManager : AbsGuildManager
        {
            public AdminGuildManager(string name, AbsGuildManager superiorGuildManager) : base(name,
                superiorGuildManager)
            {
            }
    
            public override void HandlerRequest(GuildRequest request)
            {
                if (request.GuildRequestType == GuildRequestType.请假)
                {
                    Console.WriteLine($"管理员同意:{request.UserId}请假成功");
                }
                else
                {
                    SuperiorGuildManager?.HandlerRequest(request);
                }
            }
        }
    
        public class CreatorGuildManager : AbsGuildManager
        {
            public CreatorGuildManager(string name, AbsGuildManager superiorGuildManager) : base(name,
                superiorGuildManager)
            {
            }
    
            public override void HandlerRequest(GuildRequest request)
            {
                if (request.GuildRequestType == GuildRequestType.关门)
                {
                    Console.WriteLine($"教会创始人同意:教会关门隐退");
                }
                else
                {
                }
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                var creator = new CreatorGuildManager("创建者", null);
                var admin = new AdminGuildManager("管理员", creator);
                var tongGong = new TongGongGuildManager("同工", admin);
                var request1 = new GuildRequest(GuildRequestType.关门,Guid.NewGuid());
                var request2 = new GuildRequest(GuildRequestType.改名称,Guid.NewGuid());
                var request3 = new GuildRequest(GuildRequestType.请假,Guid.NewGuid());
                
                tongGong.HandlerRequest(request1);
                tongGong.HandlerRequest(request2);
                tongGong.HandlerRequest(request3);
                
            }
        }
    
    

    参考地址

  • 相关阅读:
    vim选中字符复制/剪切/粘贴
    pyhton输出表格数据出现省略号?(教你很快解决)
    怎么截取长图/滚动截图?(一文教你迅速截长图)?
    pyhton pandas数据分析基础入门(一文看懂pandas)
    pyhton中pandas数据分析模块快速入门(非常容易懂)
    pyhton读入Excel和csv数据文件
    Python中pandas透视表pivot_table功能详解(非常简单易懂)
    pyhton scipy最小二乘法(scipy.linalg.lstsq模块)
    python scipy优化器模块(optimize)
    python scipy样条插值函数大全(interpolate里interpld函数)
  • 原文地址:https://www.cnblogs.com/icxldd/p/15804937.html
Copyright © 2011-2022 走看看