零、抽象工廠
一、身邊的例子
二、什麼情況下使用
需要將物件的使用和建立解耦的時候;
需要提高應用的效能和記憶體使用率的時候;
建立物件的**分布在多個不同的地方,且不僅僅在乙個方法中,導致無法跟蹤這些物件的時候。
三、何時使用抽象工廠 / 工廠方法
一開始使用工廠方法,在後期需要許多任務廠方法,將建立一系列物件的過程合併在一起形成抽象工廠。抽象工廠有乙個優點,在使用工廠方法是從使用者視角通常是看不到的,抽象工廠能夠通過改變啟用的工廠方法動態的改變應用的行為。
四、應用案例
# 青蛙類
class
frog:
def__init__
(self, name):
self.name = name
def__str__
(self):
return self.name
definteract_with
(self, obstacle):
print('{} the forg encounters {} and {}!'.format(self, obstacle, obstacle.action()))
# 蟲子類
class
bug:
def__str__
(self):
return
'a bug'
defaction
(self):
return
'eats it'
# 青蛙蟲子遊戲類
class
frogworld:
def__init__
(self, name):
print(self)
self.player_name = name
def__str__
(self):
return
'\n\n\t----- forg world ------'
defmake_character
(self):
return frog(self.player_name)
defmake_obstacle
(self):
return bug()
# 巫師類
class
wizard:
def__init__
(self, name):
self.name = name
def__str__
(self):
return self.name
definteract_with
(self, obstacle):
print(self)
print('{} the wizard battles against {} and {}!'.format(self, obstacle, obstacle.action()))
# 怪獸類
class
ork:
def__str__
(self):
return
'an evil ork'
defaction
(self):
return
'kills it'
# 巫師世界遊戲類
class
wizardworld:
def__init__
(self, name):
print(self)
self.player_name = name
def__str__
(self):
return
'\n\n\t------ wizard world ------'
defmake_character
(self):
return wizard(self.player_name)
defmake_obstacle
(self):
return ork()
# 遊戲入口類
class
gameenvironment:
def__init__
(self, factory):
# 建立角色
self.hero = factory.make_character()
# 建立障礙物
self.obstacle = factory.make_obstacle()
defplay
(self):
self.hero.interact_with(self.obstacle)
# 驗證輸入的年齡
defvalidate_age
(name):
try:
age = input('welcome {}.how old are you ?'.format(name))
age = int(age)
except valueerror as err:
print("age {} is invalid, please try again...".format(age))
return (false, age)
return (true, age)
defmain
(): name = input("hello. what's tour name? ")
valid_input = false
while
not valid_input:
valid_input, age = validate_age(name)
game = frogworld if age < 18
else wizardworld
environment = gameenvironment(game(name))
environment.play()
if __name__ == '__main__':
main()
第二天 建立型模式 抽象工廠模式
零 抽象工廠 一 身邊的例子 二 什麼情況下使用 需要將物件的使用和建立解耦的時候 需要提高應用的效能和記憶體使用率的時候 建立物件的 分布在多個不同的地方,且不僅僅在乙個方法中,導致無法跟蹤這些物件的時候。三 何時使用抽象工廠 工廠方法 一開始使用工廠方法,在後期需要許多任務廠方法,將建立一系列物...
建立型模式 工廠模式and抽象工廠模式
意圖 定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。主要解決 主要解決介面選擇的問題。何時使用 我們明確地計畫不同條件下建立不同例項時。如何解決 讓其子類實現工廠介面,返回的也是乙個抽象的產品。關鍵 建立過程在其子類執行。步驟 建立乙個介面 形狀sh...
建立型模式(抽象工廠模式)
目錄總結 當系統所提供的工廠所需生產的具體產品並不是乙個簡單的物件,而是多個位於不同產品等級結構中屬於不同型別的具體產品時需要使用抽象工廠模式。抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是乙個產品等級結構,而抽象工廠...