沒有demo的設計模式部落格沒有靈魂:
最近開發個專案,剛好需要用到責任鏈設計模式,就重溫了tomcat中pipeline-value責任鏈原始碼,剛好在這裡記下筆記。
先來考考大家,怎麼用**完成以下需求?
工廠安裝一台汽車,需要經過一套完整操作流水線,安裝引擎 -> 安裝窗子 -> 噴漆 ->質量檢查, 當所有的流程依次走完這台汽車才安裝成功。
大家應該很快想到使用責任鏈設計模式,下面我來說說tomcat中pipeline-valve責任鏈
pipeline的流程圖
其中pipeline是一條管道,valve是乙個乙個的閥門,baisc是最後乙個閥門,水流從第乙個閥門進入,依次流過每個閥門,然後再依次返回。
下面直接上**
先定義乙個pipeline介面
public inte***ce pipeline
建立乙個安裝汽車的pipeline管道
/**
* 安裝汽車責任鏈
*/public class installcarpipeline implements pipeline
current = current.getnext();
}this.basic = valve;
}public valve getfirst()
return basic;
}@override
public void addvalve(valve valve) else
current = current.getnext();}}
}@override
public void invoke(boolean ispass)
throw new runtimeexception("責任鏈上沒有鏈閥門");
}}
定義乙個valve介面
public inte***ce valve
因為會有很多管道,我們將一些通用的變數方法放入 基礎閥門 中
public abstract class basevalve implements valve
@override
public valve getnext()
}
具體閥門類
/**
* 安裝引擎閥門
*/public class installenginevalve extends basevalve
}/**
* 安裝窗子閥門
*/public class installwindowsvalve extends basevalve
}/**
* 噴漆閥門
*/public class spraypaintvalve extends basevalve
}/**
* 質檢閥門,為最後乙個閥門(basic)
*/public class qualityinspectionvalve extends basevalve
}
最後來個測試類
public class test
}
測試結果如下
引擎安裝完成
窗子安裝完成
噴漆完成
質檢合格通過
噴漆交付
窗子安裝交付
引擎安裝交付
tomcat原始碼解讀 2 容器責任鏈模式的實現
責任鏈模式 責任鏈模式可以用在這樣的場景,當乙個request過來的時候,需要對這個request做一系列的加工,使用責任鏈模式可以使每個加工元件化,減少耦合。也可以使用在當乙個request過來的時候,需要找到合適的加工方式。當乙個加工方式不適合這個request的時候,傳遞到下乙個加工方法,該加...
Tomcat中的設計模式 責任鏈模式
tomcat 中乙個最容易發現的設計模式就是責任鏈模式,這個設計模式也是 tomcat 中 container 設計的基礎,整個容器的就是通過乙個鏈連線在一起,這個鏈一直將請求正確的傳遞給最終處理請求的那個 servlet。責任鏈模式,就是很多物件有每個物件對其下家的引用而連線起來形成一條鏈,請求在...
設計模式 責任鏈
使用情況描述 某人向銀行借錢 借1w一下一般櫃員就可以解決,借2w一下一般經理就能解決,如果借更多就需要主管才能解決。這就是乙個責任鏈,根據條件的不同,分別進行複雜的邏輯運算。if,switch都可以進行這樣的操作,但是需要在每一層進行一次複雜的操作。責任鏈模式是一種物件的行為模式。在責任鏈模式裡,...