#1.什麼是工廠模式#2.工廠模式的分類
''' 1. 簡單工廠模式
2. 工廠方法模式
3. 抽象工廠方法模式
'''#3.簡單工廠模式的python實現
from abc import abcmeta, abstractmethod
class animal(metaclass=abcmeta):
@abstractmethod
def do_say(self):
pass
class dog(animal):
def do_say(self):
print("wang wang!!")
class cat(animal):
def do_say(self):
print("miao miao!!")
## 定義工廠
class forestfactory(object):
def make_sound(self, object_type):
return eval(object_type)().do_say()
## client code
if __name__ == "__main__":
ff = forestfactory()
animal = input("which animal should make_sound dog or cat?")
ff.make_sound(animal)
#4.工廠方法模式的python實現
from abc import abcmeta, abstractmethod
class section(metaclass=abcmeta):
@abstractmethod
def describe(self):
pass
class personsection(section):
def describe(self):
print("personal section")
class albumsection(section):
def describe(self):
print("album section")
class patentsection(section):
def describe(self):
print("patent section")
class publicationsection(section):
def describe(self):
print("publication section")
# 建立乙個抽象類, 並提供乙個工廠方法
class profile(metaclass=abcmeta):
def __init__(self):
self.sections =
self.createprofile()
@abstractmethod
def createprofile(self):
pass
def getsections(self):
return self.sections
def addsections(self, section):
class zhihu(profile):
def createprofile(self):
self.addsections(personsection())
self.addsections(albumsection())
self.addsections(publicationsection())
class csdn(profile):
def createprofile(self):
self.addsections(patentsection())
self.addsections(personsection())
if __name__ == '__main__':
profile_type = input("which profile you'd like to create (zhihu or csdn)")
profile = eval(profile_type)()
print("create profile..", type(profile).__name__)
print("profile has sections --", profile.getsections())
#5.抽象工廠模式的python實現
from abc import abcmeta, abstractmethod
class pizzafactory(metaclass=abcmeta):
@abstractmethod
def createvegpizza(self):
pass
@abstractmethod
def createnonvegpizza(self):
pass
class indianpizzafactory(pizzafactory):
def createvegpizza(self):
return deluxveggiepizza()
def createnonvegpizza(self):
return chickenpizza()
class uspizzafactory(pizzafactory):
def createvegpizza(self):
return mexicanvegpizza()
def createnonvegpizza(self):
return hampizza()
class vegpizza(metaclass=abcmeta):
@abstractmethod
def prepare(self, vegpizza):
pass
class nonvegpizza(metaclass=abcmeta):
@abstractmethod
def serve(self, vegpizza):
pass
class deluxveggiepizza(vegpizza):
def prepare(self):
print("prepare ", type(self).__name__)
class chickenpizza(nonvegpizza):
def serve(self, vegpizza):
print(type(self).__name__, " is served with chicken on ", type(vegpizza).__name__)
class mexicanvegpizza(vegpizza):
def prepare(self):
print("prepare ", type(self).__name__)
class hampizza(nonvegpizza):
def serve(self, vegpizza):
print(type(self).__name__, " is served with ham on ", type(vegpizza).__name__)
class pizzastore:
def __init__(self):
pass
def makepizzas(self):
for factory in [indianpizzafactory(), uspizzafactory()]:
self.factory = factory
self.nonvegpizza = self.factory.createnonvegpizza()
self.vegpizza = self.factory.createvegpizza()
self.vegpizza.prepare()
self.nonvegpizza.serve(self.vegpizza)
pizza = pizzastore()
pizza.makepizzas()
#6.工廠方法與抽象工廠方法的比較
# 工廠方法開發了乙個建立物件的方法
# 抽象工廠方法開放了乙個或者多個方法建立乙個系列的相關物件
# 工廠方法使用繼承和子類來決定要建立哪個物件
# 抽象共產方法使用組合將建立物件的任務委託給其他類
# 共產方法用於建立乙個產品
# 抽象工廠方法用於建立相關產品的系列
##7.工廠模式的優缺點
''' 優點: 1.松耦合, 即物件的建立可以獨立於類的實現
2.客戶端無需了解建立物件的類的實現,但是依然可以建立物件
3.可以在工廠中新增其他類來建立其他型別的物件
4.工廠可以重用現有物件
'''
python工廠模式 python實現工廠模式
我們有乙個基類person,包含方法get name和get gender 有兩個子類male 和female,建構函式可以打招呼。還有乙個工廠類。工廠類有乙個方法名get person有兩個輸入引數,名字和性別。使用者使用工廠類,通過呼叫get person方法。在程式執行期間,使用者通過性別傳遞...
《大話設計模式》python實現 簡單工廠模式
基於python3.6實現 最近開始看 大話設計模式 由於平常用python,所以把 改寫了一下,也是心血來潮,不知道能不能更下去,慢慢來吧。簡單工廠模式 class operation object pass class opadd operation def getresult self ret...
工廠模式 PYTHON
工廠模式屬於建立模式列表類別。它提供了建立物件的最佳方法。在工廠模式中,建立物件時不會將邏輯公開給客戶端,並使用通用介面引用新建立的物件。工廠模式使用工廠方法在python中實現。當使用者呼叫乙個方法時,傳入乙個字串,並通過工廠方法實現建立乙個新物件,並將此物件作為返回值。工廠方法中使用的物件型別由...