責任鏈模式的優點在於
將請求的傳送者和接受者解藕
可以簡化你的物件,因為它不需要知道鏈的結構
通過改變鏈內的成員或調動他們的次序,允許你動態的新增或刪除責任。
看以下情景:
我們都知道,在學校裡,每個學員都有這樣的請求:不去開班會,離校,退學。而每種請求必須由不同的人來處理。
那麼我們就可以寫這樣的乙個類來處理這樣的請求。
public class handlerwithoutpattern
public void handlerequest(string request) else
} else if ("導員".equals(name)) else
} else if ("校長".equals(name)) else
}else}}
那麼對於學員類,它是處理請求類的使用者,也就是它的客戶程式。那麼就有:
public class xueyuan
public static void main(string args)
}問題來了,對於現有的handlerwithoutpattern類,它只能處理以上三種請求。假如有一天,其中的某個學員提出了不同的請求,他要求處理「請假不去上課」的請求。
那麼對於寫handlerwithoutpattern類的人必須修改它寫的類以滿足這個學員的要求。於是,你不得不開啟**重新增加一段
else if ("老師".equals(name)) else
} 又或者是這個學校規定不給予退學,那麼也必須修改handlerwithoutpattern刪除掉這個處理請求。
可以說,只要有學員提出新的請求,那麼你就必須修改handlerwithoutpattern類,也就是說,處理請求的這個地方是易變化。而且對於大量的if else語句,那是相當的難以維護。這也違反了開閉原則了。
那麼以下是使用了責任鏈模式帶來的好處,它把這些處理請求各自封裝。
//定義乙個抽象處理,並有個setnexthandler(handler successor)方法,設定下乙個處理者
public abstract class handler
//處理請求,由子類完成
public abstract void handlerequest(string request);
//設定下乙個處理請求的人
public void setnexthandler(handler successor)
}//班長,他可以處理不來開班會的請求,其他請求它不能處理,將轉給下乙個處理者處理
public class banzhang extends handler
public void handlerequest(string request) else}}
//導員可以處理離校請求,對於其他請求,將交給下乙個處理者
public class daoyuan extends handler
public void handlerequest(string request)
else}}
//同理,這是校長
public class xiaozhang extends handler
public void handlerequest(string request)
else}}
對於學員類:
public class xueyuan
public static void main(string args) }}
假如,有乙個新學員,它提出了乙個新的「請假不去上課」的請求。那麼我並不需要修改現有的類,而只要增加乙個類,滿足這個新學員的需求
public class laoshi extends handler
public void handlerequest(string request)
else}}
那麼對於這個新學員它做的事情:
public class newxueyuan
public static void main(string args) }}
把這些關係,交由客戶程式(學員)來維護,增加了靈活度,假如有個學員提出的是"退學"的請求,如果他知道,這種請求只要導員或者校長才能處理,那麼就可以直接跳過班長,老師了。也就是說它可以根據學員的情況動態的增加或刪除某個處理者。
總結:將請求的傳送者和接受者解藕 //對於任何學員提出的新請求,都無須修改現有類,做的只
//是擴充套件
可以簡化你的物件,因為它不需要知道鏈的結構 //只要設定各個處理者的下乙個處理者是
//誰即可,學員無須知道各個處理者可以處理什麼,請求會被處理者鏈處理
通過改變鏈內的成員或調動他們的次序,允許你動態的新增或刪除責任。 //客戶程式可以根
//據自己的需求來決定處理者鏈
缺點:不易於觀察執行時的特徵,有礙於除錯。
並不保證請求一定被處理
責任鏈模式
責任鏈模式 chain of responsibility 的目標是使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。舉個例子。你到銀行去辦理業務,只是簡單的存個錢,也許atm就解決你的問題。如果你是為了交費...
責任鏈模式
有3個request與3個handler,每個request由相應的handler來處理,當乙個handler與request不匹配時則傳遞給下乙個handler來處理 inte ce request class request1 implements request class request2 ...
責任鏈模式
了解了一下責任鏈模式,簡單的說下自己的理解吧 責任鏈就是說待處理的資料在request的時候,先經過filter1的處理,再經過filter2的處理,然後response時,先經過filter2的處理,在經過filter1的處理。實現思路是filterchain包括filter1和filter2,同...