簡單工廠+工廠方法+抽象工廠

學不可以已!

在這之前也有接觸到過設計模式、只是之前的項目沒有講究過多的架構、故而一直都沒有去深究設計模式。到目前接觸到的語言也有幾種、用的比較多的就是C# and Objective-C 。項目做多了自然就發現有些東西是可以簡化或者是優化、便于應用的擴展。
先來溫習一些之前經常為提到但是沒有經常使用的設計模式。

1. 簡單工廠

概念:說的通俗些就是工廠根據不同的參數創建對應的產品。
例如:有個簡單工廠是負責計算的 我傳一個加號就返回一個算加法的計算器、我傳一個減號就返回一個算減法的計算器。

SimpleFactory.png

該設計模式如果要增加產品,必須修改工廠方法才能實現。是一個工廠可以生產多個產品(一對多)。
如果只從面向對象的角度考慮、簡單工廠其實就是一個組合類、只要需要就可以將一個產品組合到簡單工廠中甚至都可以不用抽象產品。
所以嚴格的講我到覺得簡單工廠不應該用到抽象或者接口的概念、符合簡單一詞。

2. 工廠方法

概念:工廠方法有別于簡單工廠卻是簡單工廠的升級。
不同之處、簡單工廠是通過參數來控制產品的生產、這里使用的是重載。不同的工廠實現同一個工廠方法生產不同的產品。
、是一個工廠生產一個產品(一對一)。如需增加產品、首先要增加工廠。是一對一的生產模式。
例如:還是一個抽象工廠是負責計算的。如果需要生產一個計算加法的計算器、首先就要有一個只生產加法計算器的工廠。
如果要生產一個計算減法的計算器、就要有一個生產減法計算器的工廠。

FactoryMethod.png

如圖: 工廠A 負責生產的是產品A ,工廠B負責生產產品B,
從面向對象的角度看我們發現工廠方法就是一個重載。

3.抽象工廠

概念:說的明白些抽象工廠就是 簡單工廠+工廠方法。

AbstractFactory.png

在簡單工廠中根據參數創建對應的產品,在抽象工廠中變成了根據不同的實例方法來實現。
在工廠方法中不同的動作放在不同的產品中執行、在抽象工廠中變成了不同的動作在同一個產品中去實現。

總結

從對象關系的角度看:

  1. 簡單工廠是一對多的關系 (一個工廠可以生成多個產品)
  2. 工廠方法是一對一的關系(一個工廠只能生產一個產品)
  3. 抽象工廠抽象了前面兩個設計模式、(一生產線可以生產多個產品可以、多個生產線可以生產一個產品)
    而這三個設計模式的出發點是工廠的作用、更多是擴展性演變而來。產品的抽象主要是一些列的行為和屬性,工廠的抽象才設計的關鍵。再簡單些概括就是是組合。源代碼
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容