設計模式(行為型模式) ----- 責任鏈模式(Chain of Responsibility)
有多個物件,每個物件持有對下一個物件的引用,這樣就會形成一條鏈,請求在這條鏈上傳遞,直到某一物件決定處理該請求。但是發出者並不清楚到底最終那個物件會處理該請求,所以,責任鏈模式可以實現,在隱瞞客戶端的情況下,對系統進行動態的調整。先看看關係圖:
Abstracthandler類提供了get和set方法,方便MyHandle類設定和修改引用物件,MyHandle類是核心,例項化後生成一系列相互持有的物件,構成一條鏈。
public interface Handler {
public void operator();
}
public abstract class AbstractHandler {
private Handler handler;
public Handler getHandler() {
return handler;
}
public void setHandler(Handler handler) {
this.handler = handler;
}
}
public class MyHandler extends AbstractHandler implements Handler {
private String name;
public MyHandler(String name) {
this.name = name;
}
@Override
public void operator() {
System.out.println(name+”deal!”);
if(getHandler()!=null){
getHandler().operator();
}
}
}
public class Test {
public static void main(String[] args) {
MyHandler h1 = new MyHandler(“h1”);
MyHandler h2 = new MyHandler(“h2”);
MyHandler h3 = new MyHandler(“h3”);
h1.setHandler(h2);
h2.setHandler(h3);
h1.operator();
}
}
輸出:
h1deal!
h2deal!
h3deal!
此處強調一點就是,連結上的請求可以是一條鏈,可以是一個樹,還可以是一個環,模式本身不約束這個,需要我們自己去實現,同時,在一個時刻,命令只允許由一個物件傳給另一個物件,而不允許傳給多個物件。