第十九讲:职责链模式
生活随笔
收集整理的這篇文章主要介紹了
第十九讲:职责链模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
public class CarBodyHandler extends CarHandler{@Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("組裝車身");}} public abstract class CarHandler {public abstract void HandlerCar(); } public class CarHeadHandler extends CarHandler{@Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("組裝車頭");}} public class CarTailHandler extends CarHandler{@Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("組裝車尾.");}} public class MainClass {public static void main(String[] args) {CarHandler headH = new CarHeadHandler();CarHandler bodyH = new CarBodyHandler();CarHandler tailH = new CarTailHandler();//這種方式的缺點是客戶端必須手動地調用HandlerCar()//像SERVLET的容器的過濾器的框架的實現是自動的.//就是組裝完車頭之后你自己組裝車身,組裝車尾.//我把一個流程給你以后:是先組裝車頭還是先組裝車身.你按照我給定的流程你來執行.//對象的組織-消息的傳遞-職責的分配-任務的完成 headH.HandlerCar();bodyH.HandlerCar();tailH.HandlerCar();} }這是非責任鏈模式的代碼.組裝一輛汽車的應用場景.
?
ConcreteHandler:CarHeadHandler.java、CarTailHandler.java、CarBodyHandler.java
Handler:CarHandler.java ?Hander有一條線是對自身的引用.
車頭持有車身的引用,車身持有車尾的引用.每次執行完自己的方法的時候調用下一個節點的方法繼續執行.
?
缺點:因為一個對象總是要調用鏈的下一個對象進行處理,如果中間有一個對象或者是實現出現了問題就會影響處理速度.
?
package com.ibeifeng.ex2;public class CarBodyHandler extends CarHandler{@Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("組裝車身");if(this.carHandler!=null){this.carHandler.HandlerCar();}}} package com.ibeifeng.ex2;public class CarHeadHandler extends CarHandler{@Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("組裝車頭");if(this.carHandler!=null){this.carHandler.HandlerCar();}}} package com.ibeifeng.ex2;public class CarTailHandler extends CarHandler{@Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("組裝車尾.");if(this.carHandler!=null){this.carHandler.HandlerCar();}}} package com.ibeifeng.ex2;public abstract class CarHandler {protected CarHandler carHandler;//protected屬性子類可以訪問...//private CarHandler carHandler;//持有自身的引用./* public void setNextHandler(CarHandler carHandler){this.carHandler = carHandler;}*/public CarHandler setNextHandler(CarHandler carHandler){this.carHandler = carHandler;return this.carHandler;}public abstract void HandlerCar(); } package com.ibeifeng.ex2;public class MainClass {public static void main(String[] args) {CarHandler headH = new CarHeadHandler();CarHandler bodyH = new CarBodyHandler();CarHandler tailH = new CarTailHandler();//這種方式的缺點是客戶端必須手動地調用HandlerCar()//像SERVLET的容器的過濾器的框架的實現是自動的.//就是組裝完車頭之后你自己組裝車身,組裝車尾.//我把一個流程給你以后:是先組裝車頭還是先組裝車身.你按照我給定的流程你來執行.//對象的組織-消息的傳遞-職責的分配-任務的完成 /* headH.HandlerCar();bodyH.HandlerCar();tailH.HandlerCar();*///不需要調用三個類的方法了,而是把順序預先設定好.//組裝順序預先設定好,順序是車頭->車身->車尾headH.setNextHandler(bodyH);//把第二個設置到第一個里面 bodyH.setNextHandler(tailH);//調用職責鏈的鏈頭來完成操作 headH.HandlerCar();System.out.println("------------------------------");//順序改變,希望是車身->車頭->車尾 bodyH.setNextHandler(headH);headH.setNextHandler(tailH);bodyH.HandlerCar();System.out.println("--------------------------------------");//簡便操作 bodyH.setNextHandler(headH).setNextHandler(tailH);bodyH.HandlerCar();} }?
轉載于:https://www.cnblogs.com/ZHONGZHENHUA/p/6746879.html
總結
以上是生活随笔為你收集整理的第十九讲:职责链模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Request.UrlR
- 下一篇: Web Api 转