《java與模式》-7 工廠模式

簡單工廠模式:靜態工廠方法模式;
工廠方法模式:多態性工廠模式、虛擬構造子模式;
抽象工廠模式:工具箱模式;

簡單工廠模式

有工廠角色,抽象產品角色,具體產品角色。
工廠類根據傳入的參量,決定具體創建哪一類的實例。
當多抽象類、具體類的時候,一律使用同一個工廠。
好處:產品的等級結構不會傳遞到工廠類中;
缺點:增加產品必須修改工廠類;
一個工廠類可以有多個工廠方法,分別創建不同的產品對象,java.text.DateFormat 就提供了多個靜態工廠方法;

工廠角色與抽象產品角色的合併

java.text.DateFormat 一個抽象產品類,同時是子類的工廠;
如果抽象產品角色被省略了,那麼工廠角色可以與具體角色合併(與單例、多例相似,但不等於單例、多例);

產品對象的循環使用和登記式的工廠方法

工廠可以循環使用已經創建出的對象;

工廠方法模式

抽象工廠角色,具體工廠角色,抽象產品角色,具體產品角色;
所有工廠角色的等級與產品角色的等級相同;
一個具體產品對應一個具體工廠,
如果需要新增一個產品,那麼需要同時新增一個對應的工廠;

使用接口或抽象類

將公共代碼向上抽取

使用多個工廠方法

使用不同的工廠方法,實現不同的商業邏輯
命名時要體現是用了工廠模式

產品的循環使用

工廠對象需要將已經創建過多的對象登記到一個聚集裏,以後相同的條件就直接到聚集裏查詢就可以了。— 享元模式就使用了這種工廠模式

抽象工廠模式

抽象工廠角色,具體工廠角色,抽象產品角色,具體產品角色;

抽象產品A:具體產品A1,A2。
抽象產品B:具體產品B1,B2。
抽象工廠:兩個方法 1.生產A類 2.生產B類
兩個具體工廠實現抽象工廠:工廠1生產A1和B1、工廠2生產A2、B2;
AB是不同的接口,1、2是不同的產品族;

對開閉原則的支持

  1. 增加新的產品族,以上面的例子爲例,增加一個產品族3,這時候,只需要增加具體產品3,和具體工廠3,不需要修改原有的工廠類,支持開閉原則;
  2. 增加新的產品等級結構,也就是增加抽象產品C,這時候需要修改所有的工廠類,增加方法,這樣是不滿足開閉原則的;

具體工廠本身可以設計成單例類
抽象工廠可以配備靜態方法根據參數返回具體工廠的實例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章