## 建造者模式
建造者模式用於建立複雜的物件。使用建造者模式可以使複雜的過程層次明了、清晰,把物件的建立以及使用進行了解耦。實際上從**的角度上看,是進行了多次封裝,使**結構更為規範合理,層次結構更加鮮明。
在乙個複雜的物件中,需要編寫大量的**去實現這乙個類,並且在進行初始化時,也有可能會有大量的引數去進行初始化。
建造者模式把實現乙個類給拆分成多個建立步驟,這些步驟在大多數相關資料中,一般以擬人化的形式進行表達;例如建造者、指揮者以及導演者,但是這些名詞的擬人化並不能完全的讓讀者能夠get到完整的含義。以下將詳細講解這幾個角色所需要做的事務。
此篇是乙個水文,就用建房子來作為乙個簡單示例講解。
首先我們建立乙個房子的基類來模擬房子:
class house:#房子基類
def __init__(self):
self.size=0
self.floor=0
self.garage=0
self.courtyard=0
def __str__(self):
houseinfo='我的房子有'+str(self.size)+'平公尺,'+str(self.floor)+'層樓,'+str(self.garage)+'個車庫'+str(self.courtyard)+'個院子'
return houseinfo
其中使用 size、floor、garage、courtyard用以記錄房子的資訊,以便之後工人在建造房子的時候作為記錄。
接下來我們建造乙個工人類,用來具體去建造我們的房子:
class housebuilder:#建造者類工人
def __init__(self):
self.house=house()
def buildgarage(self,amount):
self.house.garage=amount
print(self.house)
def buildfloor(self,amount):
self.house.floor=amount
print(self.house)
def buildsize(self,amount):
self.house.size=amount
print(self.house)
def buildcourtyard(self,amount):
self.house.courtyard=amount
print(self.house)
定義了建造size 尺寸占地面積、garage 車庫數量、floor 房屋樓層以及 courtyard 庭院數量,並且在這些方法中都傳入了乙個引數用作設定這些資訊。
有了工人後,再來乙個包工頭,包工頭更好的去統籌建造適宜,同時也是跟使用者的對接人。
class foreman:#領班
def __init__(self):
self.builder=housebuilder()
def build(self,size,floor,garage,courtyard):#建造步驟
self.builder.buildsize(size)
self.builder.buildfloor(floor)
self.builder.buildgarage(garage)
self.builder.buildcourtyard(courtyard)
在包工頭的初始化函式中,新建乙個工人類,也就是房子的建造者,之後定義了乙個build方法用於建造,建造時一般為首先確定面積大小,隨後建造房屋(樓層),再建造車庫以及庭院。
這個時候乙個簡單的建造者模式就完成了,為了更好的進行說明,我新建了乙個user類,這個user類並不需要了解其中具體完成,只需要對接包工頭,這個時候告訴包工頭我的占地大小,房屋大小以及一些引數後,包工頭告訴給他的小弟們,這個時候就可以開始建造了,使用者並不需要了解其建造過程。**如下:
class user():#使用者
def __init__(self,size,floor,garage,courtyard):
self.frm=foreman()
self.frm.build(size,floor,garage,courtyard)
完整**如下:
class house:#房子基類
def __init__(self):
self.size=0
self.floor=0
self.garage=0
self.courtyard=0
def __str__(self):
houseinfo='我的房子有'+str(self.size)+'平公尺,'+str(self.floor)+'層樓,'+str(self.garage)+'個車庫'+str(self.courtyard)+'個院子'
return houseinfo
class housebuilder:#建造者類工人
def __init__(self):
self.house=house()
def buildgarage(self,amount):
self.house.garage=amount
print(self.house)
def buildfloor(self,amount):
self.house.floor=amount
print(self.house)
def buildsize(self,amount):
self.house.size=amount
print(self.house)
def buildcourtyard(self,amount):
self.house.courtyard=amount
print(self.house)
class foreman:#領班
def __init__(self):
self.builder=housebuilder()
def build(self,size,floor,garage,courtyard):#建造步驟
self.builder.buildsize(size)
self.builder.buildfloor(floor)
self.builder.buildgarage(garage)
self.builder.buildcourtyard(courtyard)
class user():#使用者
def __init__(self,size,floor,garage,courtyard):
self.frm=foreman()
self.frm.build(size,floor,garage,courtyard)
xiaoming=user(500,3,2,1)
執行結果如下:
設計模式有一定的侷限性,具體使用場景得具體分析。
python創造者 Python 建造者模式
usr bin python coding utf 8 建造者基類 class personbuilder def buildhead self pass def buildbody self pass def buildarm self pass def buildleg self pass 胖子...
python創造者 python實現建造者模式
具體產品物件 classmenu menu a menu b defset menua self,item classproduct product menu defbuild hanbao self pass defbuild jiroujuan self pass defbuild kele s...
創新者和創造者之間有本質的區別
創新者和創造者之間有本質的區別。tom grasty這樣寫道。創造,是指第一次將乙個產品做出來,或者第一次引入乙個程序。愛迪生是乙個創造者。而某個人對乙個已經存在的事物做了改進或者重大貢獻時,也就有了創新。賈伯斯是乙個創新者。ok,現在大家知道這兩個概念的區別了,那對企業家來說又意味著什麼呢?你不能...