Java設計模式偷跑系列(十八)建模和責任鏈模式的實現

來源:互聯網
上載者:User

標籤:

轉載請註明出處:http://blog.csdn.net/lhy_ycu/article/details/40018231


責任鏈模式(ChainOfResponsibility): 有多個對象,每一個對象持有下一個對象的引用,形成一條鏈。請求在這條鏈上傳遞。直到某一對象決定處理該請求,可是發出者並不清楚終於哪個對象會處理該請求。

一、uml建模:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGh5X3ljdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >


二、代碼實現

/** * 責任鏈模式:有多個對象。每一個對象持有下一個對象的引用,形成一條鏈, *  * 請求在這條鏈上傳遞,直到某一對象決定處理該請求, *  * 可是發出者並不清楚終於哪個對象會處理該請求。 */interface Handler {public void operator();}/** * 這裡單獨對Handler進行封裝,方便改動引用對象 */abstract class AbstractHandler implements Handler {private Handler handler;public Handler getHandler() {return handler;}public void setHandler(Handler handler) {this.handler = handler;}}class MyHandler extends AbstractHandler implements Handler {private String name;public MyHandler(String name) {this.name = name;}@Overridepublic void operator() {if (getHandler() != null) {System.out.print(name + ",將BUG交給——>");/** * 這裡是關鍵。

【注意1】這裡不是遞迴哦~ * * 遞迴:A(operator)——>A(operator)——>A(operator) * * 責任鏈:A(operator)——>B(operator)——>C(operator) */getHandler().operator();} else {System.out.println(name + "處理BUG...\n");}}}/** * client測試類 * * @author Leo */public class Test {public static void main(String[] args) {MyHandler handler1 = new MyHandler("技術總監");MyHandler handler2 = new MyHandler("專案經理");MyHandler handler3 = new MyHandler("程式猿");/** * 假設沒有下家,將會自行處理 * * 列印結果:技術總監處理BUG... */handler1.operator();/** * 僅僅要有下家,就傳給下家處理 * * 以下的列印結果:技術總監,將BUG交給——>專案經理。將BUG交給——>程式猿處理BUG... * * 就這樣,原本是技術總監自行處理的BUG,如今一層一層的把責任推給了程式猿去處理 */handler1.setHandler(handler2);handler2.setHandler(handler3);/** * 透過列印結果能夠知道:MyHandler執行個體化後將產生一系列相互持有的對象(handler)。構成一條鏈。 */handler1.operator();/** * 【注意2】責任鏈不是鏈表:鏈表有個頭結點,咱每次必須通過頭結點才幹訪問後面的節點 * * 而責任鏈它能夠從頭訪問。也能夠從中間開始訪問,如:handler2.operator(); */}}


三、總結

1、責任鏈模式能夠實現,在隱瞞client(不知道詳細處理的人是誰)的情況下,對系統進行動態調整。


2、連結上的請求能夠是一條鏈。能夠是一個樹,還能夠是一個環,模式本身不約束這個,須要自己去實現。同一時候,在一時間,命令只同意把對象和目標。而不是同意大量對象。

著作權聲明:本文部落格原創文章。部落格,未經同意,不得轉載。

Java設計模式偷跑系列(十八)建模和責任鏈模式的實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.