Python設計模式之工廠模式

定義:定義一個建立對象的接口(工廠接口),讓子類決定實例化哪一個接口。微信

角色:抽象工廠角色,具體工廠角色,抽象產品角色,具體產品角色。微信支付

適用場景:須要生產多種,大量複雜對象的時候,須要下降代碼耦合度的時候,當系統中的產品類常常須要擴展的時候。對象

優勢:每一個具體的產品都對應一個具體工廠,不須要修改工廠類的代碼,工廠類能夠不知道它所建立的具體的類,隱藏了對象建立的實現細節。接口

缺點:每增長一個具體的產品類,就必須增長一個相應的工廠類。支付寶

代碼實現:產品

from abc import ABCMeta, abstractmethod


class Payment(metaclass=ABCMeta):
    # 抽象產品
    @abstractmethod
    def pay(self, money):
        pass


class AliPay(Payment):
    # 具體產品
    def pay(self, money):
        print('使用支付寶支付%s元' % money)


class ApplePay(Payment):
    def pay(self, money):
        print('使用蘋果支付支付%s元' % money)


class PaymentFactory(metaclass=ABCMeta):
    # 抽象工廠
    @abstractmethod
    def create_payment(self):
        pass


class AliPayFactory(PaymentFactory):
    # 具體工廠
    def create_payment(self):
        return AliPay()


class ApplePayFactory(PaymentFactory):
    def create_payment(self):
        return ApplePay()


af = AliPayFactory()
ali = af.create_payment()
ali.pay(100)


# 若是要新增支付方式
class WechatPay(Payment):
    def pay(self, money):
        print('使用微信支付%s元' % money)


class WechatPayFactory(PaymentFactory):
    def create_payment(self):
        return WechatPay()


w = WechatPayFactory()
wc = w.create_payment()
wc.pay(200)
相關文章
相關標籤/搜索