Java常用設計模式之抽象工廠模式

林花鹿發表於2018-06-22

什麼是抽象工廠模式

提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類

抽象工廠模式的層次結構

  • 抽象工廠角色
  • 具體工廠角色
  • 抽象產品角色
  • 具體產品角色

抽象工廠模式
整體結構與工廠方法模式類似,區別在於工廠方法模式的抽象工廠角色是生成一類產品,而抽象工廠模式是生成一系列的產品,如上圖的抽象工廠角色IFactory可以生成的物件是ProductA和ProductB

抽象工廠模式的優缺點

  • 優點:可以說是工廠方法模式的增強,可以在客戶端程式碼的簡單修改就進行產品系列的交換,讓具體的建立例項過程與客戶端分離,客戶端是通過它們的抽象操縱例項,產品的具體類名也被具體工廠的實現分離,不會出現在客戶端程式碼中。
  • 缺點:顯而易見,就是增加更多的程式碼量,如果要在系列中新增加一個商品,例如ProductC,除了要新建ProductC,ProductC的實現類,還要在抽象工廠中新增createProductC()方法,以至於在之前的一些工廠實現類中例如ProductFactory1()中也要createProductC()方法,這樣每一次系列中增加或者刪除,如果量多的話,都會造成很多麻煩。

例項

抽象工廠角色:

抽象工廠角色

具體工廠角色:(這裡以ProductFactory1為例子)

具體工廠角色

抽象產品角色:

抽象產品角色A

抽象產品角色B

具體產品角色:

具體產品A1

具體產品B1

客戶端:

客戶端

由例項我們再看抽象工廠模式的優缺點:

  • 優點:與工廠方法模式一樣,只需要修改一行程式碼,就可以修改要生成的整個系列的具體產品。
IFactory factory = new ProductFactory1();
--->變成
IFactory factory = new ProductFactory2();
複製程式碼
  • 缺點:如果要ProductC的系列,除了新增產品部分的程式碼外,在工廠部分的程式碼都要進行修改。

如果有什麼疑問或者建議,可以在評論下方留言,歡迎討論,謝謝。

參考資料

  • 《大話設計模式》

相關文章