责任链的主要思想是,对象引用同一类型的对象,形成一条链,链中的每个对象实现了相同的方法,处理链中对一个对象发起的同一个请求,如果一个对象不知道如果处理请求,它就把他传到下一个响应器。责任链类图如下:
就以此类图说明,假定有三个对象Avatar对象avatar ,MetalArmor对象armor和CryatelShield对象shield,构成责任链shield-》armor-》avatar,现在收到一个攻击假定为attack对象,此时,shield会收到handleAttack:attack的消息,shield会调用用handleAttack方法应对攻击,shield发现自己并不能处理这类的攻击,于是它将该消息传给了责任链中的下一个响应者armor,armor调用handleAttack方法,发现自己也不能处理该类型的攻击,也只能传给avatar,因为之前的对象都不能处理该类攻击,avatar只能自己来处理该类攻击,avatar角色表现出受到攻击,血量下降等。如果sheild和armor中一个能够完全处理该类的攻击,那么就不会将消息传递到下一个响应者,avatar就不会受到攻击的消息。这只是个责任链使用的一个例子,通过例子更能够深入理解这种设计模式,
其实我们iOS开发中的响应链也是采用这种设计模式。