Python設計模式之簡單工廠模式

定義:不直接向客戶暴露對象建立的實現細節,而是經過一個工廠類來負責建立產品類的實例。app

角色:工廠角色,抽象產品角色,具體產品角色。對象

優勢:隱藏了對象建立代碼的細節,客戶端不須要修改代碼。ip

缺點:違反了單一職責原則,將建立邏輯集中到一個工廠裏面,當要添加新產品時,違背了開閉原則支付寶

代碼實現:產品

from abc import ABCMeta,abstractmethod

class Payment(metaclass=ABCMeta):

    # 抽象產品角色
    @abstractmethod
    def pay(self,money):
        pass



class AiliPay(Payment):

    # 具體產品角色
    def __init__(self,enable_yuebao=False):
        self.enable_yuebao = enable_yuebao

    def pay(self,money):
        if self.enable_yuebao:
            print('使用餘額寶支付%s元'%money)
        else:
            print('使用支付寶支付%s元'%money)

class ApplePay(Payment):
    # 具體產品角色
    def pay(self,money):
        print('使用蘋果支付支付%s元'%money)

class PaymentFactory:

    # 工廠角色
    def create_payment(self,method):
        if method == 'alipay':
            return AiliPay()
        elif method == 'yuebao':
            return AiliPay(True)
        elif method == 'applepay':
            return ApplePay()
        else:
            return NameError

p = PaymentFactory()
f = p.create_payment('yuebao')
f.pay(100)
相關文章
相關標籤/搜索