欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 设计模式-」责任链

程序员文章站 2022-06-27 20:38:57
最近公司一个40多岁的前辈离职....小弟我开开心心的准备接手他的代码.本想学习一下..结果打开一看..嫩住了...一个业务逻辑写了将近300行if else 代码..就一个简单的..判断A是否等于 如果等于就返回..不等于就继续往下判断..所有条件判断完为止..刚好碰到产品需要在加一个判断进去...我对着代码找了版本..硬是没发现在哪里下手..先后顺序..条件对等..等等..所以小弟决定改了这个...长痛不如短痛..第一步..头脑中努力回想我学过的设计模式....随便挑一个出来用..然后百度...

最近公司一个40多岁的前辈离职....小弟我开开心心的准备接手他的代码.本想学习一下..

结果打开一看..嫩住了...一个业务逻辑写了将近300行if else 代码..就一个简单的..判断A是否等于 如果等于就返回..不等于就继续往下判断..所有条件判断完为止..

刚好碰到产品需要在加一个判断进去...我对着代码找了版本..硬是没发现在哪里下手..先后顺序..条件对等..等等..
所以小弟决定改了这个...长痛不如短痛..

第一步..头脑中努力回想我学过的设计模式....随便挑一个出来用..然后百度一下你就知道...最终..


C# 责任链模式

1、新建一个抽象类.MessageHandlingAuditor.cs
 

public abstract class MessageHandlingAuditor
    {
        public string flag { get; set; }

        public abstract ApplyContext Audit(ApplyContext apply);

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

        public ApplyContext AuditNext(ApplyContext context)
        {
            ApplyContext apply = new ApplyContext();
            if (this._Auditor != null)
            {
                apply = this._Auditor.Audit(context);
            }
            return apply;

        }
    }

 

2、BettingBig.cs 继承抽象
    public class BettingBig : MessageHandlingAuditor
    {
        public override ApplyContext Audit(ApplyContext apply)
        {
            if (ApplyContext.v==flag )
            {

                return ApplyContext;

            }
            else
            {
                return base.AuditNext(apply);
            }
        }
    }

3、    BettingSmall .cs继承抽象类

public class BettingSmall : MessageHandlingAuditor
    {
        public override ApplyContext Audit(ApplyContext apply)
        {
           

            if (ApplyContext.v== flag )
            {

return ApplyContext;

}

            else
            {
                return base.AuditNext(apply);
            }
        }
    }

最后 封装一个类调用

public class MessageHandlingControl
    {
        public static ApplyContext Build(ApplyContext apply)
        {

           ///把美好的串一串 链一链
            MessageHandlingAuditor da = new BettingBig() { flag = "大" };
            MessageHandlingAuditor xiao = new BettingSmall() { flag = "小" };

            da.SetNext(xiao);

            这个可以不要..因为是我代码中的切割版本。哈哈
            ///xiao.SetNext(dan);
            return da.Audit(apply);

        }
    }

记录下美好生活..

本文地址:https://blog.csdn.net/woainilll/article/details/107335616

相关标签: C# C# 设计模式