Java設計模式<責任鏈>
意圖
- 避免請求發送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,并且沿著這條鏈傳遞請求,直到有對象處理它為止
場景
- 處理消息的時候以過濾很多道
優點
- 降低耦合度。它將請求的發送者和接收者解耦
- 簡化了對象。使得對象不需要知道鏈的結構
- 增強給對象指派職責的靈活性。通過改變鏈內的成員或者調動它們的次序,允許動態地新增或者刪除責任
- 增加新的請求處理類很方便
現實場景舉例
JavaDemo
審批人接口
public abstract class Worker {
protected Worker worker;
public abstract void permit();
public Worker setNext(Worker next){
this.worker = next;
return next;
}
}
Team Leader
public class TLWorker extends Worker{
public void permit() {
System.err.println("i am the TL ,I have permitted ");
if(worker != null){
worker.permit();
}
}
}
PM
public class PMWorker extends Worker {
public void permit() {
System.err.println("i am the PM ,I have permitted ");
if(worker != null){
worker.permit();
}
}
}
CEO
public class CEOWorker extends Worker {
public void permit() {
System.err.println("i am the CEO ,I have permitted ");
if(worker != null){
worker.permit();
}
}
}
測試類
public class DemoMain {
public static void main(String[] args) {
CEOWorker ceoWorker = new CEOWorker();
PMWorker pmWorker = new PMWorker();
TLWorker tlWorker = new TLWorker();
tlWorker.setNext(pmWorker).setNext(ceoWorker);
tlWorker.permit();
}
}
輸出
i am the TL ,I have permitted
i am the PM ,I have permitted
i am the CEO ,I have permitted