1.定義
每個具體產品對應乙個具體的工廠類,工廠類中包含生產該產品的全套方法。
2.具體角色
抽象產品角色
具體產品角色
抽象工廠角色
具體工廠角色
from abc import abcmeta, abstractclassmethod, abstractmethod
class payment(metaclass=abcmeta):
@abstractmethod
def pay(self, money):
pass
# 具體產品角色
class alipay(payment):
def pay(self, money):
print("支付寶餘額支付{}".format(money))
class wechatpay(payment):
def pay(self,money):
# 抽象工廠角色
class paymentfactory(metaclass=abcmeta):
@abstractmethod
def create_payment(self):
pass
# 具體工廠角色
class alipayfactory(paymentfactory):
def create_payment(self):
return alipay()
class wechatfactory(paymentfactory):
def create_payment(self):
return wechatpay()
if __name__ == '__main__':
ali = alipayfactory().create_payment()
ali.pay(1000)
3.優缺點
優點:相比於簡單工廠模式的只建立乙個工廠類,當有新的產品時,需要修改工廠類**,而工廠方法模式的每個具體產品對應乙個具體的工廠類,不需要修改工廠類**,並且同時也能滿足隱藏物件建立的細節
。
缺點:就是每增加乙個具體產品類,就必須增加乙個相應的具體方法
。例如:增加乙個花唄的支付模式:
from abc import abcmeta, abstractclassmethod, abstractmethod
class payment(metaclass=abcmeta):
@abstractmethod
def pay(self, money):
pass
# 具體產品角色
class alipay(payment):
def __init__(self,use_huabel=false):
self.use_huabel = use_huabel
def pay(self, money):
if self.use_huabel:
print("支付寶花唄支付{}".format(money))
else:
print("支付寶餘額支付{}".format(money))
class wechatpay(payment):
def pay(self,money):
# 抽象工廠角色
class paymentfactory(metaclass=abcmeta):
@abstractmethod
def create_payment(self):
pass
# 具體工廠角色
class alipayfactory(paymentfactory):
def create_payment(self):
return alipay()
class wechatfactory(paymentfactory):
def create_payment(self):
return wechatpay()
class huabeifactory(paymentfactory):
def create_payment(self):
return alipay(use_huabel=true)
if __name__ == '__main__':
huabei = huabeifactory().create_payment()
huabei.pay(1000)
**稍顯冗餘。 3 工廠方法模式
簡單工廠方法不符合開閉原則,增加按鈕功能需要修改工廠類。現在對該系統進行修改,不再設計乙個按鈕工廠類來統一負責所有產品的建立,而是將具體按鈕的建立過程交給專門的工廠子類去完成,我們先定義乙個抽象的按鈕工廠類,再定義具體的工廠類來生成圓形按鈕 矩形按鈕 菱形按鈕等,它們實現在抽象按鈕工廠類中定義的方法...
工廠方法模式 工廠方法模式
工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...
工廠方法模式 工廠方法模式 二
工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...