角色:this
針對一類請求,有多個處理方法,若是不用責任鏈模式代碼會相似爲:code
if(type = 1){ //這麼處理 }else if(type = 2){ //這麼處理 }else if(type =3){ //這麼處理 }else{ //這麼處理 }
針對這種if-elseif-else結構的分支,能夠將處理方式進行抽象封裝爲Hanlder。用鏈的形式傳遞請求到各個實現類。 好比針對一個請求Request,抽象的Hanlder處理邏輯爲:blog
public final void hanlderMessage(Request request){ //若是本身可以處理 if(request.getType().equals(this.getType)){ //本身進行處理 this.response() }else{ if(this.getNextHanlder() == null){ //若是沒有接替者,按默認狀況處理 this.hanlderMessageDefault(request); }else{ //交給本身的接替者進行處理 this.getNextHanlder().hanlderMessage(request); } } }
大概就是這種結構,其中運用了模板方法模式,hanlderMessage就是每一個ConcreateHanlder類繼承的方法。繼承類只須要實現resonse方法來按照本身的邏輯實現處理,這個抽象Hanlder只須要提供對外的方法setType用來定義本身的處理級別與請求的類型相對應,以及hanlderMessage來處理請求。繼承
優勢是封裝了if-elseif-else這種的邏輯分支,將請求與處理分了開來,請求只須要關心抽象的Hanlder。而具體實現ConcreateHanlder也不用關心具體的請求全貌,只須要處理本身的方式。若是須要擴展處理只須要多實現一個Hanlder就能夠了。內存
缺點也很明顯,這種鏈表的調用形式,若是調用鏈過長會浪費棧內存空間。get