工廠模式,可以理解為建立乙個工廠(類),這個工廠會根據你的需求(輸入)生產出(輸出)你想要的產品(物件)。簡單說就是工廠類會根據你的輸入給你返回恰當的物件。
class
shape
: @staticmethod
deffactory
(shape)
:if shape ==
'square'
:return square(
)if shape ==
'circle'
:return circle(
)class
square
: @staticmethod
defdraw()
:return
"i am a square"
class
circle
: @staticmethod
defdraw()
:return
"i am a circle"
if __name__ ==
'__main__'
: shape = shape(
).factory(
"square"
)print
(shape.draw())
shape = shape(
).factory(
"circle"
)print
(shape.draw(
))
抽象工廠:有時候我們希望通過單個介面能夠訪問所有的工廠,而不用關心具體的工廠,此時就需要定義乙個抽象類,讓所有的工廠類都繼承這個類並實現這個介面。
from abc import abcmeta, abstractmethod
class
abstractfactory
(metaclass=abcmeta)
:"""
抽象工廠,定義所有工廠需要實現的介面
"""@abstractmethod
defmake_object
(self)
:pass
class
squarefactory
(abstractfactory)
:"""
具體工廠,繼承抽象工廠,實現必要介面
"""defmake_object
(self)
:return square(
)class
circlefactory
(abstractfactory)
:"""
具體工廠,繼承抽象工廠,實現必要介面
"""defmake_object
(self)
:return circle(
)class
square
: @staticmethod
defdraw()
:return
"i am a square"
class
circle
: @staticmethod
defdraw()
:return
"i am a circle"
if __name__ ==
'__main__'
:def
draw_func
(factory)
:"""
呼叫函式,不關心具體工廠,直接使用make_object()介面建立物件。
"""obj = factory.make_object(
)print
(obj.draw())
factory = squarefactory(
) draw_func(factory)
factory = circlefactory(
) draw_func(factory)
python設計模式之工廠模式
from abc import abcmeta,abstractmethod class coke metaclass abcmeta abstractmethod defdrink self pass class coca coke defdrink self print drink coca c...
python學習 設計模式之 工廠模式
一 工廠模式運用場景 若需要將物件的建立和使用解耦,工廠方法也能派上用場。工廠方法可以在必要時建立新的物件,從而提高效能和記憶體使用率。二 工廠模式案例 import xml.etree.elementtree as etree import json class jsonconnector def...
設計模式 設計模式之工廠模式
工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...