學習筆記
對責任鏈模式概念的解釋來自:http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html
責任鏈模式:責任鏈模式是一種對象的行為模式。在責任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。發出這個請求的客戶端并不知道鏈上的哪一個對象最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。
運用場景:android中的事件處理機制、有序廣播
項目目錄:
AbstractRequest.java類(抽象請求類)
package com.example.resposbility;public abstract class AbstractRequest { PRivate Object object; public AbstractRequest(Object object) { this.object=object; } /** * 具體的內容對象 * @return */ public Object getContent() { return object; } /** * 獲取請求級別 */ public abstract int getRequestLevel();}Handler.java類(抽象處理類)
package com.example.resposbility;public abstract class Handler { public Handler nextHandler; public void handleRequest(AbstractRequest abstractRequest) { if(getHandleLevel()==abstractRequest.getRequestLevel()) { handle(abstractRequest); }else { if(nextHandler!=null) { nextHandler.handleRequest(abstractRequest); }else { System.out.println("----> 所有的處理對象都不能處理它"); } } } /** * 每個處理者的對象的具體處理方式 * @param abstractRequest */ public abstract void handle(AbstractRequest abstractRequest); /** * 每個處著對象處理的級別 * @return */ public abstract int getHandleLevel();}定義三個具體的請求類:Request1.java類
package com.example.resposbility;public class Request1 extends AbstractRequest{ public Request1(Object object) { super(object); } @Override public int getRequestLevel() { return 1; }}Request2.java類
package com.example.resposbility;public class Request2 extends AbstractRequest{ public Request2(Object object) { super(object); } @Override public int getRequestLevel() { return 2; }}Request3.java類
package com.example.resposbility;public class Request3 extends AbstractRequest{ public Request3(Object object) { super(object); } @Override public int getRequestLevel() { return 3; }}定義三個具體的請求類Handler1.java類
package com.example.resposbility;public class Handler1 extends Handler{ @Override public void handle(AbstractRequest abstractRequest) { System.out.println("----handle1 處理請求: "+abstractRequest.getRequestLevel()); } @Override public int getHandleLevel() { return 1; } }Handler2.java類package com.example.resposbility;public class Handler2 extends Handler { @Override public void handle(AbstractRequest abstractRequest) { System.out.println("----handle2 處理請求: "+abstractRequest.getRequestLevel()); } @Override public int getHandleLevel() { return 2; }}Handler3.java類package com.example.resposbility;public class Handler3 extends Handler { @Override public void handle(AbstractRequest abstractRequest) { System.out.println("----handle3 處理請求: "+abstractRequest.getRequestLevel()); } @Override public int getHandleLevel() { return 3; }}測試:Client.java類
package com.example;import com.example.resposbility.AbstractRequest;import com.example.resposbility.Handler;import com.example.resposbility.Handler1;import com.example.resposbility.Handler2;import com.example.resposbility.Handler3;import com.example.resposbility.Request3;public class Client { public static void main(String[] args) { //確定鏈式關系 Handler handler1=new Handler1(); Handler handler2=new Handler2(); Handler handler3=new Handler3(); handler1.nextHandler=handler2; handler2.nextHandler=handler3; AbstractRequest request3=new Request3("請求1"); handler1.handleRequest(request3); }}
新聞熱點
疑難解答