(一)、工程模式執行場景
若需要將物件的建立和使用解耦,工廠方法也能派上用場。
工廠方法可以在必要時建立新的物件,從而提高效能和記憶體使用率。
(二)、工廠模式案例
import xml.etree.elementtree as etree
import json
class
jsonconnector
:def
__init__
(self, filepath)
: self.data =
dict()
with
open
(filepath, mode=
'r')
as f:
self.data = json.load(f)
@property
defparsed_data
(self)
:return self.data
class
xmlconnector
:def
__init__
(self, filepath)
: self.tree = etree.parse(filepath)
@property
defparsed_data
(self)
:return self.tree
defconnection_factory
(filepath)
:if filepath.endswith(
'json'):
connector = jsonconnector
elif filepath.endswith(
'xml'):
connector = xmlconnector
else
:raise valueerror(
'cannot connect to {}'
.format
(filepath)
)return connector(filepath)
defconnect_to
(filepath)
: factory =
none
try:
factory = connection_factory(filepath)
except valueerror as ve:
print
(ve)
return factory
if __name__ ==
'__main__'
:# 要那個傳哪個,不占用記憶體
sqlite_factory = connect_to(
'person.sq3'
) xml_factory = connect_to(
'person.xml'
) json_factory = connect_to(
'person.json'
)
(一)、什麼是抽象工廠乙個抽象工廠是(邏輯上的)一組工廠方法,其中的每個工廠方法負責產生不同種類的物件。
(二)、應用場景
(三)、應用案例
class
frog
:# 青蛙類
def__init__
(self, name)
: self.name = name
def__str__
(self)
:return self.name
definteract_with
(self, obstacle)
:print
('{} the frog 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------ frog 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
('{} 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(
)def
play
(self)
: self.hero.interact_with(self.obstacle)
defvalidate_age
(name)
:try
: age =
raw_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 =
raw_input
("hello. what's your name? "
) valid_input =
false
while
not valid_input:
valid_input, age = validate_age(name)
game = frogworld if age <
18else wizardworld
environment = gameenvironment(game(name)
) environment.play(
)if __name__ ==
'__main__'
: main(
)
python設計模式 工廠模式
在學習工廠模式之前,我們必須要了解何為所謂的工廠模式 這篇部落格,我就利用乙個例子來一步步對工廠模式,進行概述 提到工廠模式,我們要有兩個事物,一是工廠,二是產品,具體工廠 產品是什麼型別的?這裡是抽象的,不具體的,需要具體的工廠 產品來繼承或實現其方法,才能稱為具體工廠 具體產品 接下來我定義1個...
python設計模式 工廠模式
在工廠設計模式中,客戶端可以請求乙個物件,而無需知道這個物件來自 即使用哪個類來生成這個物件。工廠背後的思想是簡化物件的建立,物件的建立和使用解耦。工廠模式的兩種形式 一是工廠方法 factory method 對不同的輸入引數返回不同的物件 二是抽象工廠,它是一組用於建立一系列相關事物物件的工廠方...
Python 設計模式 簡單工廠模式
簡單工廠模式,作為oo 乙個較為簡單的建立者設計模式。其主要思想,通過介面或繼承建立 不同的子類。現在乙個dom解析器作為父類,其中xml,soup 分別作為兩個不同解析方式,作為子類。vechicl 的建立 如下 1 外部依賴的介面,它遮蔽了我具體使用的第三方庫 2class omtree 3de...