建造者模式
我們想要建立乙個由多個部分構成的物件,而且它的構成需要一步一步地完成。只有當各個部分都建立好,這個物件才算是完整的。這正是建造者設計模式的用武之地。建造者模式將乙個複雜物件的構造過程與其表現分離,這樣同乙個構造過程可用於建立不同的表現。
現實生活中的例子:快餐店使用的就是建造者模式。即使存在不同的多種漢堡包和包裝,準備乙個漢堡包及打包的過程是相同的。經典款漢堡包和乳酪漢堡包之間的區別在於表現,而不是建造過程。
指揮者是出納員,將需要準備什麼餐品的指令傳達給工作人員,建造者是工作人員中的個體,關注具體順序。
應用案例:建造者模式和工廠模式的主要區別在於工廠模式以單個步驟建立物件,而建造者模式以多個步驟建立物件,並且幾乎始終會使用乙個指揮者。另乙個區別是,在工廠模式下,會立即返回乙個建立好的物件;而在建造者模式下,僅在需要時客戶端**才顯示地請求指揮者返回最終的物件。
#假設想買一台新電腦,如果決定購置一台也定的預配置的電腦型號,如蘋果1.4ghz mac mini,則是使用工廠模式。
#所有的規格都已經由製造商預先確定,製造商不用向你諮詢什麼就知道自己該做什麼,他們通常接收僅僅是單條指令。
#工廠模式
mini14 = '
1.4ghz mac mini
'class
class
macmini14:
def__init__
(self):
self.memory = 4self.hdd = 500self.gpu = '
intel hd graphics 5000
'def
__str__
(self):
info = ("
model:{}
".format(mini14),
"memory:{}gb
".format(self.memory),
"hard disk:{}gb
".format(self.hdd),
"graphics card:{}
".format(self.gpu))
return'\n
'.join(info)
defbuild_computer(self,model):
if model==mini14:
return
self.macmini14()
else
:
print("
i don't know how to build {}.
".format(model))
#if __name__ == '__main__':##
mac_mini = afac.build_computer(mini14)
#print(mac_mini)
#建立者模式,購買提條定製的電腦,假若這樣使用的則是建造者模式。你是指揮者,向製造商提供指令說明心中理想的電腦規格。
class
computer:
def__init__
(self,serial_number):
self.serial =serial_number
self.memory =none
self.hdd =none
self.gpu =none
def__str__
(self):
info = ("
model:{}
".format(mini14),
"memory:{}gb
".format(self.memory),
"hard disk:{}gb
".format(self.hdd),
"graphics card:{}
".format(self.gpu))
return'\n
'.join(info)
class
computerbuilder:
def__init__
(self):
self.computer = computer('
ag23385193')
defconfigure_memory(self,amount):
self.computer.memory =amount
defconfigure_hdd(self,amount):
self.computer.hdd =amount
defconfigure_gpu(self,gpu_model):
self.computer.gpu =gpu_model
class
hardwareengineer:
def__init__
(self):
self.builder =none
defconstruct_computer(self,memory,hdd,gpu):
self.builder =computerbuilder()
#[step for step in (self.builder.configure_memory(memory),
#self.builder.configure_hdd(hdd),
#self.builder.configure_gpu(gpu))]
self.builder.configure_memory(memory)
self.builder.configure_hdd(hdd)
self.builder.configure_gpu(gpu)
@property
defcomputer(self):
return
self.builder.computer
defmain():
engineer =hardwareengineer()
engineer.construct_computer(hdd=500,memory=8,gpu='
geforce gtx 650 ti')
computer =engineer.computer
(computer)
if__name__ == '
__main__':
main()
小結
在以下情況下,與工廠模式相比,建造者模式是更好的選擇。1.想要建立乙個複雜物件(物件由多個部分構成,且物件的建立要經過多個不同的步驟,這些步驟也許還需遵從特定的順序);
2.要求乙個物件能有不同的表現,並希望將物件的構造與表現解耦;
3.想要在某個時間點建立物件,但在稍後的時間點再訪問。
建立型模式 建造者模式
建造者模式 builder pattern 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。與抽象工廠的區別 在建造者模式裡,有個指導者,由指導者來管理建造者,使用者和指導聯絡,指導者聯絡建造者最後得到產品牌。即建造模式可以強制實現一種分步驟進行的建造過程。建造者模式將複雜...
建立型模式 建造者模式
這段時間剛好要觀摩持久層框架mybatis,恰好看到mybatis 複雜的工廠物件 sqlsessionfactory 的生成類 sqlsessionfactorybuilder 不禁想起gof 23種設計模式中的建造者模式。對照現實中,你去買車時只需知道你要買車的型別,便可到店中購得心滿意足的產品...
建立型模式 建造者模式
在開發中經常有些複雜的物件,它們擁有一系列成員屬性,這些成員屬性中有些是引用型別的成員物件。而且在這些複雜物件中,通過不同的屬性生成 不同的物件 比如 汽車 這個物件,通過不同的發動機製造出來之後,都是汽車 但是他的效能,是不同的 建造者模式 builder pattern 將乙個複雜的物件的構建過...