1. 程式人生 > >Python設計模式之簡單工廠模式

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

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

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

優點:隱藏了物件建立程式碼的細節,客戶端不需要修改程式碼。

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

程式碼實現:

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)