前言:本篇系看完《研磨設計模式》一書的個人理解和總結,可能存在不正確的地方,看時需要持懷疑態度。另外,所有的圖都是示意圖,示意,示。
工廠方法模式(FactoryMethod):
幾點解釋:
- 簡單工廠是由客戶端調用靜態方法得到具體實現的一個引用;工廠方法模式中的工廠方法一般不提供給客戶端使用,這也是圖中聲明爲 protect 的原因,由具體的子類來實現工廠方法,返回一個具體對象的引用,這個工廠方法一般是由 抽象父類中的其他方法調用。
- 客戶端一般是使用 SpecificB類的對象,調用其中的某些方法。
- 本質:延遲到子類選擇具體的實現。
- 咋一看其實結構和模板方法模式很類似,但是區別還是很大的:工廠方法模式的子類的作用在於從諸多已有的實現中選擇一個實現創建實例並返回,而模板方法模式的子類往往需要提供整體算法骨架中某個小步驟的結果。
抽象工廠模式(AbstractFactory):
幾點解釋:
- 簡單工廠、工廠方法模式基本上都是單個對象的創建,抽象工廠模式關注的是一系列相關對象(產品簇)的創建。
- 名爲抽象工廠,實則在Java中的實現是 聲明一個包含相關創建方法的接口
- 本質:選擇一個產品簇的實現
- 抽象工廠如果只有一個抽象方法,其實就退化爲工廠方法,而工廠方法如果不延遲到子類,直接創建實現,其實就退化爲簡單工廠