設計模式之職責鏈(Chain of Resposibility) c#
設計模式之職責鏈(Chain of Resposibility)
Author: 李艷慶 Date: 2005年11月11日
職責鏈是多個(gè)類(lèi)共同處理一個(gè)請求.當A類(lèi)不能處理時(shí)則傳遞給B類(lèi),B類(lèi)不能處理時(shí)傳遞給C類(lèi),依次傳下去,直到處理或所有類(lèi)遍歷一次. 也就是說(shuō)當一個(gè)類(lèi)不能處理一個(gè)請求時(shí),就把該請求傳給它的下家,下家不能處理,再傳給它的下下家. 例如顯示某個(gè)數值,每個(gè)類(lèi)呢,都有一個(gè)顯示范圍,判斷是否在這個(gè)范圍內,在則顯示,不在就傳給它的下家. 建立一個(gè)抽象的處理類(lèi).所有處理類(lèi)繼承于它. public abstract class ShowNumber { protected ShowNumber show; public void SetNextHandler(ShowNumber show) { this.show = show; } public abstract void ShowRequest(int number); } 下面為四個(gè)簡(jiǎn)單的處理類(lèi): public class ShowNumber1 : ShowNumber { public override void ShowRequest(int number) { if ((number >= 0) && (number < 250)) { Console.WriteLine(number.ToString()); } else if(show != null) { show.ShowRequest(number); } } } public class ShowNumber2 : ShowNumber { public override void ShowRequest(int number) { if ((number >= 250) && (number < 500)) { Console.WriteLine(number.ToString()); } else if(show != null) { show.ShowRequest(number); } } } public class ShowNumber3 : ShowNumber { public override void ShowRequest(int number) { if ((number >= 500) && (number < 750)) { Console.WriteLine(number.ToString()); } else if(show != null) { show.ShowRequest(number); } } } public class ShowNumber4 : ShowNumber { public override void ShowRequest(int number) { if ((number >= 750) && (number < 1000)) { Console.WriteLine(number.ToString()); } else if(show != null) { show.ShowRequest(number); } } }
調用時(shí),依次將處理類(lèi)聯(lián)結.最后由第一個(gè)處理類(lèi)處理. public class Client { public static void Main() { ShowNumber show1 = new ShowNumber1(); ShowNumber show2 = new ShowNumber2(); ShowNumber show3 = new ShowNumber3(); ShowNumber show4 = new ShowNumber4(); show1.SetNextHandler(show2); show2.SetNextHandler(show3); show3.SetNextHandler(show4); show1.ShowRequest(300); } }
當第一個(gè)處理類(lèi)不能處理時(shí),會(huì )傳給第二個(gè)處理類(lèi),第二個(gè)處理類(lèi)可以處理 |
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。