责任链模式

菜鸟也疯狂之责任链模式

责任链顾名思义就是一条链子,只不过这条链子上挂着些许对象,每个对象只负责处理分内的事情,不属于自己该做的事情就顺着链子交给下一个对象去处理。我们先上代码,结尾再加以解释

public class Event
{
    public int num = 0;
    public Event(int num){
        this.num = num;
    }
}

public abstract class BaseClass
{
    protected string name;
    public BaseClass next;
	public BaseClass(string name){
        this.name = name;
    }
    public abstract void Handle(Event e);
}

public class AClass:BaseClass
{
    public AClass(string name) : base(name) {
    }
    public override void Handle(Event e)
    {
        if(e.num < 10)  {
            Debug.Log(name +":handle");
        }
        else{
            if (next != null) next.Handle(e);
        }
    }
}

public class BClass:BaseClass
{
    public BClass(string name) : base(name) {
    }

    public override void Handle(Event e)
    {
        if (e.num >= 10 && e.num <=20){
            Debug.Log(name + ":handle");
        }
        else{
            if (next != null) next.Handle(e);
        }
    }
}

public class CClass:BaseClass
{
    public CClass(string name) : base(name){
    }

    public override void Handle(Event e) 
    {
        if (e.num > 20){
            Debug.Log(name + ":handle");
        }
        else {
            if (next != null) next.Handle(e);
        }
    }
}
void Start()
    {
        //声明三个能够处理事件的对象
        AClass zhangsan = new AClass("zhangsan");
        BClass lisi = new BClass("lisi");
        CClass wangwu = new CClass("wangwu");
        //设置责任链
        zhangsan.next = lisi;
        lisi.next = wangwu;
        //声明事件
        Event et = new Event(15);
        //zhangsan这个对象开始处理事件
        zhangsan.Handle(et);
    }

可以看到,不同对象的权限不同,对象zhangsan只负责处理当num小于10的情况,lisi负责处理10~20的情况,wangwu负责处理大于20的情况,而这是不是和分支语句if else很像?答对了,责任链模式说白了就是对if else的封装,把具体的if else 封装到不同对象的内部去进行判断。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值