1. 程式人生 > >設計模式-責任鏈模式(responsibility)

設計模式-責任鏈模式(responsibility)

責任鏈模式是行為模式的一種,該模式構造一系列的分別擔當不同職責的類的物件(HeaderCar、BodyCar、FooterCar)來共同完成一個任務,這些類的物件之間像鏈條一樣緊密相連。

角色和職責:

1.抽象處理者(Handler)-CarHandler:

 

2.具體處理者(Concrete Handler) -:

 

UML圖:

 

具體程式碼:

/**
 * 汽車類
 */
public abstract class CarHandler {
    protected CarHandler carHandler;

    public
CarHandler 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