職責鏈模式之真假美猴王

2021-09-08 18:11:17 字數 2834 閱讀 7385

孫悟空終於還是沒有能逃脫如來的手掌心,因緣注定,皈依佛門。雖沒有了做齊天大聖是的逍遙快活,也沒有大鬧天宮時的轟轟烈烈,可是如今有了更重要的一項任務。那就是普度眾生,《 西遊記》第五十七回,說是「六耳獼猴」化作孫悟空的摸樣,傷了唐僧,後又和孫悟空大打出手。。。這位假孫悟空,實力不用多說了吧。和真孫悟空一般無二,大戰孫悟空,鬧到上天入地下海。

在唐僧那:念緊箍咒,兩個都喊疼。自然看不出哪個真假。到天宮:拖塔天王拿照妖鏡照。也看不出;又到觀音那:觀音也看不出。最後到幽冥處閻羅那:經「諦聽」聽過之後。「諦聽」卻說:「我看出來了,卻不敢說」。最後還是如來老佛爺道出六耳真身並用金缽盂罩住,才被孫悟空一棍子打死。這是整個故事,看似非常easy。非常完整。只是,我發現乙個天大的伏筆。

那就是,真假美猴王的故事和我們設計模式中的職責鏈模式有著異曲同工之妙,在物件導向程式設計裡, 職責鏈模式是一種軟體設計模式,它包括了一些命令物件和一系列的處理物件。每個處理物件決定它能處理哪些命令物件,它也知道怎樣將它不能處理的命令物件傳遞給該鏈中的下乙個處理物件。

該模式還描寫敘述了往該處理鏈的末尾加入新的處理物件的方法。

官方定義---使多個物件都有機會處理請求。從而避免請求的傳送者和接收者之間的耦合關係,將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理她為止。來看一下職責鏈模式的結構圖:

在我們的實際生活中,我們也時常與職責鏈模式打著交道。比方類似「鬥地主」這種遊戲中。小北出牌給他的下家,下家看看手中的牌。假設要不起上家的牌則將出牌請求再**給他的下家,其下家再進行推斷。乙個迴圈下來,假設其它人都要不起該牌。則小北能夠打出新的牌。在這個過程中,牌作為乙個請求沿著一條鏈在傳遞,每一位紙牌的玩家都能夠處理該請求。

以我們上述真假美猴王的故事為例,看看我們的**實現:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

//唐僧-->托塔李天王-->觀音菩薩-->閻羅殿諦聽-->如來佛祖

judgement.tangseng.nextimmortal = judgement.li********;

judgement.li********.nextimmortal = judgement.guanyin;

judgement.tangseng.nextimmortal = judgement.diting;

judgement.diting.nextimmortal = judgement.rulai;

//兩美猴王入場

string sunwukong = "sunwukong",

sixearmonkey = "sixearmonkey";

//開始推斷真假美猴王

therealmonkeyking realmonkeyking = judgement.judge(sunwukong, sixearmonkey);

console.writeline();

console.writeline("then,真正的美猴王是:" + realmonkeyking + "孫悟空");

console.readkey();}}

//管理者。也就是眾多神仙們

abstract class immortal

//設定神仙的上級。這裡的級別並沒有嚴格的等級制度之分,僅僅是由於該級別身份的神仙沒有辨別出真假孫悟空

public void setsuperior(immortal superior)

//申請請求

}//接下來。詳細的神仙推斷,首先是唐僧

//唐僧

public class tangseng : immortal

// 指定下一路神仙 來推斷真假美猴王

public immortal nextimmortal

}//托塔李天王

public class li******** : immortal

// 指定下一路神仙 來推斷真假美猴王

public immortal nextimmortal

}//觀音

public class guanyin : immortal

// 指定下一路神仙來推斷真假美猴王

public immortal nextimmotal

}//諦聽

public class diting :immortal

// 指定下一路神仙 來推斷真假美猴王

public ihandler nexthandler

}//如來

public class rulai :immortal

}

對於真假美猴王這塊的內容。大家爭論不一,在真假美猴王事出之前,孫悟空並不全然都聽唐僧的話,甚至有時候。還鬧個小矛盾,導致唐僧僅僅好念緊箍咒。典型的乙個叛逆者形象。

可自從真假美猴王事出之後。孫悟空從此保護唐僧安安分分。

而以此事能夠看出,孫悟空前後可判若兩人。

不排除,孫悟空已被如來利用六耳獼猴一戰中,安安靜靜、無人知曉的收服了。也有人說佛祖能通曉過去未來。早就設此考驗,算到六耳獼猴必死於孫悟空手上,屆時孫悟空就能戰勝心魔。真正走上成仙之路。假設佛祖出手阻擋孫悟空的那一棍,保住六耳獼猴性命。那麼設此考驗又有何意義?這也說明了,孫悟空殺死六耳獼猴。徹底清除了自己內心的**一面。從內心上懂得了成仙成佛的真正的道路。

所以在「真假美猴王」一難之後才會服服帖帖,真心為皈依佛門而保護唐僧。

西遊記的故事還在演繹流傳。設計模式的精彩稍後繼續......

設計模式之職責鏈模式

如果我們現在有乙個需求,乙個人他生了病,這個病要在 醫院才能看,但是這個病人並不清楚,就先去了一級醫院,一級醫院的醫生告訴他你的病要去二級醫院看,二級醫院也告訴他 你的病我這裡看不了,你要去 醫院才能看,最後他去 醫院把病看好了.這個過程直接寫成 class patient this.patient...

設計模式之職責鏈模式

職責鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。適用場景 1 有多個的物件可以處理乙個請求,哪個物件處理該請求執行時刻自動確定 2 在不明確指定接收者的情況下,向多個物件中的乙個提交乙個請求 ...

設計模式之職責鏈模式

職責鏈模式 chain of responsibility 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將多個物件連成一條鏈,沿著這條鏈傳遞請求直到有物件處理它為止。可以定義乙個抽象類來表示處理事件的物件,這個類首先有個處理事件的抽象方法,然後提供乙個方法設定下一級處理者...