動機(motivation)
在軟體系統中,經常面臨著「一系列相互依賴的物件」的建立工作;同時,由於需求的變化,往往存在更多系列的物件的建立工作。
如何應對這種變化?如何繞過常規的物件建立方法(new),提供一種「封裝機制」來避免客戶程式和這種「多系列具體物件建立工作」的緊耦合?
意圖(intene)
提供乙個介面,讓該介面負責建立一系列「相關或者相互依賴的物件」,無需指定他們具體的類。
結構(stucture)
具體**實現:
1對應圖中的abstractfactory
2abstract
class
facilitiesfactory
3
1對應圖中的abstractproducta
2abstract
class
road38
set 9}
10public
abstract
void
roadmethod();
11 }
1對應圖中的abstractproductb
2abstract
class
building38
set 9}
10public
abstract
void
buildingmethod();
11 }
1對應圖中的concretefactory1
2class
modenfacilities:facilitiesfactory38
9public
override
building createbuilding()
1013 }
1對應圖中的concretefactory2
2class
classicfacilities:facilitiesfactory38
9public
override
building createbuilding()
1013 }
1對應圖中的client
2class
gamemanage311
public
void
buildfacilities()
1216
public
void
run()
1721 }
1對應圖中的producta1
2class
modenroad:road
3的道路
",this
.name);7}
8public modenroad(string
name)
912 }
1對應圖中productb1
2class
modenbuilding:building
3的建築物
",this
.name);8}
9public modenbuilding(string
name)
1013 }
1對應圖中producta2
2class
classicroad:road
3的道路
", this
.name);7}
8public classicroad(string
name)
912 }
1對應圖中productb2
2class
classicbuilding:building
3的建築物
", this
.name);7}
8public classicbuilding(string
name)
912 }
1abstract factory模式的幾個要點如果沒有應對「多系列物件構建」的需求變化,則沒有必要使用abstract factory模式,這時候使用簡單的靜態工廠。這是主函式的呼叫
2static
void main(string
args)
3
「系列物件」指的是這些物件之間有相互依賴、或作用的關係,例如遊戲開發場景中的「道路」與「房屋」的依賴。
abstract factory模式主要在於應對「新系列」的需求變動,其缺點在於難以應對「新物件」的需求變動。
abstract factory模式經常和factory method模式共同組合來應對「物件建立」的需求變化。
Gof 抽象工廠模式
繼續打卡設計模式 今天聊一下抽象工廠模式 依然回到我們訂購披薩的需求 我們現在依然存在北京的 希臘 乳酪 胡椒三種口味 以及倫敦 希臘 乳酪 胡椒三種口味 學習抽象工廠一定先了解一下簡單工廠模式 那麼現在我們看看二者的區別在 首先我們需要有乙個pizza的基類 author 德鑫 descripti...
設計模式GOF23 抽象工廠模式
抽象工廠模式 abstract factory 是建立者模式的一種,是一種負責建立物件的模式。抽象工廠算是工廠模式的一種,因為邏輯和實現相對複雜一些,所以在設計模式中不少說明都是分開說明的。抽象工廠也是為了實現物件建立和物件使用的分離。工廠模式雖然已經實現了這一需求,但是還是不夠徹底。比如 如果建立...
GOF23設計模式之抽象工廠模式的實現
package com.bjsxt.cn.abstractfactory public inte ce engineclass luxuryengine implements engine override public void start class lowengine implements e...