python創造者 Python3 實現建造者模式

2021-10-19 02:04:54 字數 3397 閱讀 9563

## 建造者模式

建造者模式用於建立複雜的物件。使用建造者模式可以使複雜的過程層次明了、清晰,把物件的建立以及使用進行了解耦。實際上從**的角度上看,是進行了多次封裝,使**結構更為規範合理,層次結構更加鮮明。

在乙個複雜的物件中,需要編寫大量的**去實現這乙個類,並且在進行初始化時,也有可能會有大量的引數去進行初始化。

建造者模式把實現乙個類給拆分成多個建立步驟,這些步驟在大多數相關資料中,一般以擬人化的形式進行表達;例如建造者、指揮者以及導演者,但是這些名詞的擬人化並不能完全的讓讀者能夠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,現在大家知道這兩個概念的區別了,那對企業家來說又意味著什麼呢?你不能...