行为型设计模式---模板方法\观察者模式\责任链模式

1.模板方法:其实就是抽象出来一层出来

2.观察者模式:事件的方式

3.责任链模式:

请假审批:

                AbstractAuditor auditor = AuditorBuilder.Build();
                auditor.Audit(context);

可以指定是哪一级,使用SetNext指定下一流程是哪个。

复制代码
public class AuditorBuilder
    {
        public static AbstractAuditor Build()
        {
            //更具备扩展性
            AbstractAuditor pm1 = new PM();
            AbstractAuditor charge = new Charge();
            AbstractAuditor manager = new Manager();
            pm1.SetNext(charge);
            charge.SetNext(manager);


            //反射+配置文件

            return pm1;
        }
    }
复制代码

抽象类如下:里面包含方法如下:

复制代码
public abstract class AbstractAuditor
    {
        
        public string Name { get; set; }

        public abstract void Audit(ApplyContext context);

        private AbstractAuditor _Auditor = null;
        public void SetNext(AbstractAuditor auditor)
        {
            this._Auditor = auditor;
        }

        public void AuditNext(ApplyContext context)
        {
            if (_Auditor != null)
            {
                _Auditor.Audit(context);
            }
        }
    }
复制代码

PM实例:

复制代码
class PM :AbstractAuditor
    {
        public override void Audit(ApplyContext context)
        {
            Console.WriteLine("这里是项目经理审批");
            if (context.Hour <= 8)
            {
                context.AuditResult = true;
                context.AnditRemark = "enjoy your vacation";
            }
            else
            {
                //Console.WriteLine("这里是主管审批");
                //AbstractAuditor abstractAuditor = new Charge();
                //abstractAuditor.Audit(context);
                //if(_Auditor != null)
                //{
                //    _Auditor.Audit(context);
                //}
                base.AuditNext(context);
            }
        }
    }
复制代码

Charge实例:

复制代码
class Charge : AbstractAuditor
    {
        public override void Audit(ApplyContext context)
        {
            Console.WriteLine("这里是主管审批");
            if (context.Hour <= 16)
            {
                context.AuditResult = true;
                context.AnditRemark = "enjoy your vacation";
            }
            else
            {
                base.AuditNext(context);
            }
        }
    }
复制代码

 

posted @   你好呀嗯嗯  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示