設計模式-責任鏈模式(responsibility)
阿新 • • 發佈:2018-12-11
責任鏈模式是行為模式的一種,該模式構造一系列的分別擔當不同職責的類的物件(HeaderCar、BodyCar、FooterCar)來共同完成一個任務,這些類的物件之間像鏈條一樣緊密相連。
角色和職責:
1.抽象處理者(Handler)-CarHandler:
2.具體處理者(Concrete Handler) -:
UML圖:
具體程式碼:
/** * 汽車類 */ public abstract class CarHandler { protected CarHandler carHandler; publicCarHandler setChaimHandler(CarHandler carHandler){ this.carHandler = carHandler; return carHandler; } public abstract void task(); }
/** * 安裝車頭 */ public class HeaderHandler extends CarHandler{ @Override public void task() { System.out.println("安裝車頭!");if(carHandler != null){ carHandler.task(); } } }
/** * 安裝車身 */ public class BodyHandler extends CarHandler{ @Override public void task() { System.out.println("安裝車身"); if(carHandler != null){ carHandler.task(); } } }
/*** 安裝車尾 */ public class FooterHandler extends CarHandler{ @Override public void task() { System.out.println("安裝車尾"); if(carHandler != null){ carHandler.task(); } } }
public class Main { public static void main(String[] args) { CarHandler headerHandler = new HeaderHandler();//車頭 CarHandler bodyHandler = new BodyHandler();//車身 CarHandler footerHandler = new FooterHandler();//車尾 headerHandler.setChaimHandler(bodyHandler).setChaimHandler(footerHandler); headerHandler.task();//拼裝車 } }
優缺點:
優:1.責任的分擔,每個類只需要處理自己該處理的工作,明確各類的責任範圍,符合類的最小封裝原則;
2.可以根據需要自由組合工作流程。
3.類和類之間鬆耦合
缺:因為處理時以鏈的形式在物件間傳遞訊息,根據實現方式不同,可能影響處理速度
應用場景:
1.比如客戶要完成一個任務,任務包括a,b,c,d四個部分。首先把任務交給a,a完成後交給b,b完成後交給c,c完成交給d
2.政府某項工作,縣政府完成自己能處理的部分,不能處理的交給市政府。市政府處理自己能處理的部分,不能處理的交給省政府。
3.軟體視窗的訊息傳遞
4.過濾器filter的實現。
原始碼地址:https://github.com/qjm201000/design_pattern_responsibility.git