重要程度:★★★☆☆ 一、什麼是責任鏈模式 為請求創建了一個接收者對象的鏈,每個接收者都包含對另一個接收者的引用,當某個接受者不能處理該請求時,會將該請求轉給下一個接受者處理; 二、補充說明 請求發送者與請求接受者解耦 應用例子:struts的攔截器,servlet的過濾器 三、角色 抽象請求處理者
重要程度:★★★☆☆
一、什麼是責任鏈模式
為請求創建了一個接收者對象的鏈,每個接收者都包含對另一個接收者的引用,當某個接受者不能處理該請求時,會將該請求轉給下一個接受者處理;
二、補充說明
請求發送者與請求接受者解耦
應用例子:struts的攔截器,servlet的過濾器
三、角色
抽象請求處理者
具體請求處理者:包含下一個具體請求處理者的引用
客戶端:請求發送者
四、例子,JAVA實現
說明:模擬一個村、鎮、縣的責任鏈關係請求
抽象處理者
package com.pichen.dp.behavioralpattern.chain; public abstract class Handler { protected Handler next; public abstract void handleRequest(String value); public Handler next() { return this.next; } public void setNext(Handler next) { this.next = next; } }
具體村、鎮、縣處理者
package com.pichen.dp.behavioralpattern.chain; public class VillageHandler extends Handler { /** * @see com.pichen.dp.behavioralpattern.chain.Handler#handleRequest() */ @Override public void handleRequest(String value) { if ("village".equals(value)) { System.out.println("VillageHandler: handled~"); } else { System.out.println("VillageHandler: pass~"); this.next.handleRequest(value); } } }
package com.pichen.dp.behavioralpattern.chain; public class TownHandler extends Handler { @Override public void handleRequest(String value) { if ("town".equals(value)) { System.out.println("VillageHandler: handled~"); } else { System.out.println("Town: pass~"); this.next.handleRequest(value); } } }
package com.pichen.dp.behavioralpattern.chain; public class CountyHandler extends Handler { @Override public void handleRequest(String value) { if ("county".equals(value)) { System.out.println("County: handled~"); } else if (this.next == null) { System.out .println("no next Handler, this request can not be handle~"); } else { System.out.println("County: pass~"); this.next.handleRequest(value); } } }
客戶端:
package com.pichen.dp.behavioralpattern.chain; public class Main { public static void main(String[] args) { Handler villageHandler = new VillageHandler(); Handler townHandler = new TownHandler(); Handler countyHandler = new CountyHandler(); villageHandler.setNext(townHandler); townHandler.setNext(countyHandler); System.out.println("test county request:"); villageHandler.handleRequest("county"); System.out.println("\ntest city request:"); villageHandler.handleRequest("city"); } }
結果:
test county request: VillageHandler: pass~ Town: pass~ County: handled~ test city request: VillageHandler: pass~ Town: pass~ no next Handler, this request can not be handle~