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

##二、代碼實現
~~~
/**
* 責任鏈模式:有多個對象,每個對象持有下一個對象的引用,形成一條鏈,
*
* 請求在這條鏈上傳遞,直到某一對象決定處理該請求,
*
* 但是發出者并不清楚最終哪個對象會處理該請求。
*/
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;
}
@Override
public 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");
}
}
}
/**
* 客戶端測試類
*
* @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、責任鏈模式可以實現,在隱瞞客戶端(不知道具體處理的人是誰)的情況下,對系統進行動態的調整。
2、鏈接上的請求可以是一條鏈,可以是一個樹,還可以是一個環,模式本身不約束這個,需要自己去實現,同時,在一個時刻,命令只允許由一個對象傳給另一個對象,而不允許傳給多個對象。
- 前言
- (一)策略模式建模與實現
- (二)觀察者模式建模與實現
- (三)裝飾者模式建模與實現
- (四)工廠方法模式建模與實現
- (五)抽象工廠模式建模與實現
- (六)單例模式建模與實現
- (七)命令模式建模與實現
- (八)適配器模式建模與實現
- (九)外觀模式建模與實現
- (十)模板方法模式建模與實現
- (十一)迭代器模式建模與實現
- (十二)組合模式建模與實現
- (十三)狀態模式建模與實現
- (十四)代理模式建模與實現
- (十五)建造者模式建模與實現
- (十六)原型模式建模與實現
- (十七)橋接模式建模與實現
- (十八)責任鏈模式建模與實現
- (十九)備忘錄模式建模與實現
- (二十)解釋器模式建模與實現
- (二十一)享元模式建模與實現
- (二十二)中介者模式建模與實現
- (二十三)訪問者模式建模與實現
- Java設計模式博客全目錄