当前位置: 移动技术网 > IT编程>开发语言>.net > C# 设计模式-」责任链

C# 设计模式-」责任链

2020年07月17日  | 移动技术网IT编程  | 我要评论

最近公司一个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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网