深入解析Python設計模式程式設計中建造者模式的使用

2022-10-04 22:03:41 字數 3579 閱讀 8664

建造者模式:將乙個複雜物件的構建與他的表示分離,使得同樣的構建過程可以建立不同的表示。

基本思想

某類產品的構建由很多複雜元件組成;

這些元件中的某些細節不同,構建出的產品表象會略有不同;

通過乙個指揮者按照產品的建立步驟來一步步執行產品的建立;

當需要建立不同的產品時,只需要派生乙個具體的建造者,重寫相應的元件構建方法即可。

**結構

class builder(object):

"""基類"""

def part1(self):

# 不同型別的產品,該步驟的細節可能不同

raise notimplementederror()

def part2(self):

# 不同型別的產品,該步驟的細節可能不同

raise notimplementederror()

class builder1(builder):

"""派生類,生產builder1型別的產品"""

def part1(self):

print 'builder1 part1'

def part2(self):

print 'builder1 part2'

class builder2(builder):

"""派生類,生產builder2型別的產品"""

def part1(self):

print 'builder2 part1'

def part2(self):

print 'builder2 part2'

class director(object):

"""指揮者,負責組織產品的構建過程"""

def build(self, builder):

builder.part1()

builder.part2()

def client():

director = director()

director.build(builder1())

director.build(builder2())

這裡有乙個疑問,指揮者這個角色有什麼用呢。感覺除了增加client的呼叫負擔外,似乎沒什麼用處。為什麼不把產品構建過程放在builder基類中呢,像下面這樣:

class builder(object):

"""基類"""

def part1(self):

raise notimplementederror()

def part2(self):

raise notimplementederror()

def build(self):

self.part1()

self.part2()

class builder1(builder):

def part1(self):

print 'builder1 part1'

def part2(self):

print 'builder1 part2'

class builder2(builder):

def part1(self):

print 'builder2 part1'

def part2(self):

print 'builder2 part2'

def client():

builder1().build()

builder2().build()

沒錯,上面就是典型的模板方法模式的實現套路,回顧一下模板方法模式的定義: > 模板方法模式:定義乙個工作流或演算法的基本骨架,而將一些特定步驟的實現延遲到子類中。

模板方法模式更多的關注於演算法流程,而建造者模式更多的關注於複雜物件的建立,模板模式應用場景比建造者模式更多一些,寫起來也更自然一些。

類圖例項

#encoding=utf-8

# #by panda

#建造者模式

def printinfo(info):

print unicode(info, 'utf-8').encode('gbk')

#建造者基類

class personbuilder():

def buildhead(self):

pass

def buildbody(self):

pass

def buildarm(self):

pass

def buildleg(self):

pass

#胖子

class personfatbuilder(personbuilder):

type = '胖子'

def buiuhtbpstkldhead(self):

printinfo("構建%s的頭" % self.type)

def buildbody(self):

printinfo("構建%s的身體" % self.type)

def buildarm(self):

printi程式設計客棧nfo("構建%s的手" % self.type)

def buildleg(self):

printinfo("構建%s的腳" % self.type) 程式設計客棧

#瘦子

class personthinbuilder(personbuilder):

type = '瘦子'

def buildhead(self):

printinfo("構建%s的頭" % self.type)

def buildbody(self):

printinfo("構建%s的身體" % self.type)

def buildarm(self):

printinfo("構建%s的手" % self.type)

def buildleg(self):

printinfo("構建%s的腳" % self.type)

#指揮者

class persondirector():

pb = none;

def __init__(self, pb):

self.pb = pb

def createpereson(self):

self.pb.buildhead()

self.pb.buildbody()

self.pb.buildarm()

self.pb.buildleg()

def clientui():

pb = personthinbuilder()

pd = persondirector(pb)

pd.createpereson()

pb = personfatbuilder()

pd = persondirector(pb)

pd.createpereson()

return

if __name__ == '__main__':

clientui();

本文標題: 深入解析python設計模式程式設計中建造者模式的使用

本文位址: /jiaoben/python/143694.html

PHP設計模式之命令模式的深入解析

命令模式 command 命令模式是封裝乙個通用操作的機制。如果你熟悉c或php,你可能已經遇到過command,它相當於程式中的 callback 通常使用乙個函式指標或資料結構如php中的字串和陣列實現,command是在乙個方法呼叫之上的抽象,它吸收了所有物件導向的好處 合成 繼承和處理。例如...

結合案例深入解析模板方法設計模式

模板方法模式是類的行為模式。準備乙個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的用意。例如 在現實生活中,完成某件事情是需要 n 個固定步驟的。如 ...

PHP設計模式之結構模式的深入解析

結構模式之間有許多相似之處,因為在物件模型結構中存在幾種關係 類之間的繼承和實現,加上物件組合,這些是php設計模式的主要目的。物件組合的最大優勢在於可以在執行時基於配置建立起乙個關係,並不用修改實際的 它是類繼承和介面實現需要的乙個操作。實際上,你完全可以通過修改物件之間而非類之間的鏈結定義乙個應...