iOS设计模式解析(五)责任链模式

  • 责任链模式:使多个对象都有机会处理请求,从而避免发送者和接受者之间发生耦合。
  • 应用场景
    •   有多个对象可以处理请求,而处理程序只有在运行时才能确定
  • 例如:  英雄联盟中伤害计算,伤害类型分为AP、AD、真实伤害(无视任何防御直接造伤害)。

            

  • 结构分析:整个结构就在这个攻击处理器的抽象。抽象一个属性,下一个处理器(newxHandler)、抽象一个方法,处理攻击(handleAttack)
    1 -(void)handleAttack:(attack *)attack{
    2      [nextHandler handleAttack:attack];      
    3 }
    handler

    然后有魔法处理器、物理处理器继承攻击处理器并且重写了handleAttack方法。在使用的时候创建不同的处理期并且将nextHandler赋值。这样就可以构成一个链。比如链如(魔法处理器->物理处理器->人)那么一次物理攻击来了之后会交给魔法处理器调用HandleAttack来处理,其中发现魔法处理器不可以处理物理伤害,那么则调用【Next handleAttack:attack】而魔法处理器的next是物理处理器,这样就做到事件传递。正巧物理处理器可以处理物理伤害,那么这次伤害就被抵消。

  • 总结延伸:Cocoa Touch中的响应链也是如此。事件在当前所在的lowestView中处理,发现响应不了,那么这个事件就会按照设定的响应链条传递给nextResponsder处理一直向上传递知道可以被响应或者crash
posted @ 2016-05-10 11:35  conor  阅读(566)  评论(0编辑  收藏  举报