设计模式-(责任链模式)

定义

让一群对象都有机会来处理一项请求,以减少请求发送者与接收者之间的耦合度。将说有的接收者对象串接起来,让请求沿着串接传递,直到有一个对象可以处理为止。

组成部分

Handler(请求接收者接口)
定义可以处理客户端请求事项的接口。
可包含可链接下一个同样能处理的请求的对象引用。
ConcreteHandler1,ConcreteHandler2(实现请求接收者接口)
实现请求处理接口,并判断对象本身是否能处理这次请求。
不能完成请求的话,交由后继者(下一个)来处理。
Client(请求发送者)
将请求发送给的一个接收者对象,并等待请求的回复。

游戏应用

在设计植物大战僵尸中,僵尸来领波次的设置是用了责任链模式。
Handler

public abstract class StageHandler
{
    protected StageHandler stageHandler = null;


    public StageHandler(StageHandler stageHandler)
    {
        this.stageHandler = stageHandler;
    }

    public virtual void HandleRequset(int enemyNum)
    {
        if (stageHandler != null)
        {
            stageHandler.HandleRequset(enemyNum);
        }
    }
}

ConcreteHandler1,ConcreteHandler2

public class StageConcreteHandler1 : StageHandler
{
    public StageConcreteHandler1(StageHandler stageHandler) : base(stageHandler) { }

    public override void HandleRequset(int enemyNum)
    {
        //敌人数量小于等于20,下一波开始
        if (enemyNum <= 20)
        {
            stageHandler.HandleRequset(enemyNum);
        }
    }
}

public class StageConcreteHandler2 : StageHandler
{
    public StageConcreteHandler2(StageHandler stageHandler) : base(stageHandler) { }

    public override void HandleRequset(int enemyNum)
    {
        // 敌人数量为0结束
        if (enemyNum <= 0)
        {
            stageHandler.HandleRequset(enemyNum);
            //通知游戏结束
        }
    }
}

Client

    int enemyNum = 50;
    StageConcreteHandler1 stageConcreteHandler1;
    public void init()
    {
        StageConcreteHandler2 stageConcreteHandler2 = new StageConcreteHandler2(null);
        stageConcreteHandler1 = new StageConcreteHandler1(stageConcreteHandler2);
       
    }

    public void EnemyDead()
    {
        enemyNum--;
        stageConcreteHandler1.HandleRequset(enemyNum);
    }

优缺点

责任链模式让一群信息接收者能够一起被串联起来管理,让信息判断上能有一致的操作接口,不必因为不同的接收者而必须执行类转换操作,并且让所有的信息接收者都有机会可以判断是否提供服务或将需求移往下一个信息接收者,在后续的系统维护上,也可以轻易地增加接收者类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值