責(zé)任鏈的主要思想是,對(duì)象引用同一類型的對(duì)象,形成一條鏈,鏈中的每個(gè)對(duì)象實(shí)現(xiàn)了相同的方法,處理鏈中對(duì)一個(gè)對(duì)象發(fā)起的同一個(gè)請(qǐng)求,如果一個(gè)對(duì)象不知道如果處理請(qǐng)求,它就把他傳到下一個(gè)響應(yīng)器。責(zé)任鏈類圖如下:
就以此類圖說(shuō)明,假定有三個(gè)對(duì)象Avatar對(duì)象avatar ,MetalArmor對(duì)象armor和CryatelShield對(duì)象shield,構(gòu)成責(zé)任鏈shield-》armor-》avatar,現(xiàn)在收到一個(gè)攻擊假定為attack對(duì)象,此時(shí),shield會(huì)收到handleAttack:attack的消息,shield會(huì)調(diào)用用handleAttack方法應(yīng)對(duì)攻擊,shield發(fā)現(xiàn)自己并不能處理這類的攻擊,于是它將該消息傳給了責(zé)任鏈中的下一個(gè)響應(yīng)者armor,armor調(diào)用handleAttack方法,發(fā)現(xiàn)自己也不能處理該類型的攻擊,也只能傳給avatar,因?yàn)橹暗膶?duì)象都不能處理該類攻擊,avatar只能自己來(lái)處理該類攻擊,avatar角色表現(xiàn)出受到攻擊,血量下降等。如果sheild和armor中一個(gè)能夠完全處理該類的攻擊,那么就不會(huì)將消息傳遞到下一個(gè)響應(yīng)者,avatar就不會(huì)受到攻擊的消息。這只是個(gè)責(zé)任鏈?zhǔn)褂玫囊粋€(gè)例子,通過(guò)例子更能夠深入理解這種設(shè)計(jì)模式,
其實(shí)我們iOS開發(fā)中的響應(yīng)鏈也是采用這種設(shè)計(jì)模式。