设计模式-行为设计模式:责任链模式 ResponsibilityChain

责任链模式

对一个任务处理的过程中,可能有多个环节,申请的发起者只能找到一个入口,它不知道环节里面的东西,只需要一个结果,保证里面的处理类是按照顺序对它进行处理

责任链模式就是让节点之间自己把任务进行传递处理,并返回一个结果


责任链父类

    public abstract class BaseLian
    {
        public  BaseLian _baselian;
        public abstract void Do(Animal house);
    }

下面3个子类 分别继承上面的父类,并且重写了Do方法,当发现自己解决不了之后,如果有下一级操作,会自动转送给下一级进行处理


 /// <summary>
    /// 只能居住体积小于等于10的动物
    /// </summary>
    public class SmallHouse:BaseLian
    {
        public SmallHouse()
        {
            Console.WriteLine("{0}开始测量......",this.GetType().ToString());
        }

        public override void Do(Animal animal)
        {
            if (animal.Size <= 10)
            {
                animal.Node = "1";
                animal.house = this.GetType().ToString();
            }
            else
            {
                if (this._baselian != null)
                {
                    //没权限,需要向上级提交 看上级是否可以居住
                    Console.WriteLine("{0}住不下,去别的地方看看吧", this.GetType().ToString());
                    base._baselian.Do(animal);
                }
                else
                {
                    //没有更大的了
                    Console.WriteLine("没有更大的了");
                }
            }
        }
    }

/// <summary>
    /// 只能居住体积小于等于20的动物
    /// </summary>
    public class MediumHouse:BaseLian
    {
        public MediumHouse()
        {
            Console.WriteLine("{0}开始测量......",this.GetType().ToString());
        }
        public override void Do(Animal animal)
        {
            if (animal.Size <= 20)
            {
                animal.Node = "1";
                animal.house = this.GetType().ToString();
            }
            else
            {
                if (this._baselian != null)
                {
                    //没权限,需要向上级提交 看上级是否可以居住
                    Console.WriteLine("{0}住不下,去别的地方看看吧", this.GetType().ToString());
                    base._baselian.Do(animal);
                }
                else
                { 
                    //没有更大的了
                    Console.WriteLine("没有更大的了");
                }
            }
        }
    }


/// <summary>
    /// 只能居住体积小于等于30的动物
    /// </summary>
    public class BigHouse:BaseLian
    {
        public BigHouse()
        {
            Console.WriteLine("{0}开始测量......",this.GetType().ToString());
        }
        public override void Do(Animal animal)
        {
            if (animal.Size <= 30)
            {
                animal.Node = "1";
                animal.house = this.GetType().ToString();
            }
            else
            {
                if (this._baselian != null)
                {
                    //没权限,需要向上级提交 看上级是否可以居住
                    Console.WriteLine("{0}住不下,去别的地方看看吧", this.GetType().ToString());
                    base._baselian.Do(animal);
                }
                else
                {
                    //没有更大的了
                    Console.WriteLine("没有更大的了");
                }
            }
        }
    }


设置一个动物类

public class Animal
    {
        public int ID { get; set; }

        public string Name { get; set; }

        public int Size { get; set; }

        /// <summary>
        /// 是否找到居住点 0正在寻找 1找到了 2未找到
        /// </summary>
        public string Node { get;set; }

        public string house { get; set; }
    }

调用

//创建一个动物
            Animal animal = new Animal()
            {
                ID=1,
                Name="咩咩",
                Node="0",
                Size=12
            };

            BaseLian xiao = new SmallHouse();
            BaseLian zhong = new MediumHouse();
            BaseLian da = new BigHouse();

            //为小房子添加中房子为下一级
            xiao._baselian = zhong;
            //为中房子添加下一级为大
            zhong._baselian = da;

            //把动物放进去
            xiao.Do(animal);

            //检查动物状态
            if (animal.Node == "2")
            {
                Console.WriteLine("太大了,没地方住");
            }
            else {
                Console.WriteLine("{0}住在了{1}里面",animal.Name,animal.house);
            }

结果:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值