3 工廠方法模式

2021-10-12 10:49:52 字數 2298 閱讀 5140

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產...