工廠方法模式
阿新 • • 發佈:2017-06-02
工廠方法 creat display src odi 工廠類 color pass env
一、內容
不直接向客戶端暴露對象創建的實現細節,定義一個用於創建對象的接口(工廠接口),讓子類決定實例化哪一個產品類
二、角色
- 抽象工廠角色(Factory)
- 具體工廠角色(Concrete Factory)
- 抽象產品角色(Product)
- 具體產品角色(Concrete Product)
三、優點
- 隱藏了對象創建的實現細節
- 工廠類可以不知道它所創建的對象的類
- 每個具體的產品都對應了一個具體的工廠,不需要修改工廠類代碼
四、缺點
- 每增加一個具體產品類,就必須增加一個相應的具體工廠類
五、適用場景
- 需要生產多種、大量復雜對象的時候
- 需要降低耦合度的時候
- 當系統中的產品種類需要經常擴展的時候
六、實例
#!/usr/bin/env python # -*- coding: utf8 -*- # __Author: "Skiler Hao" # date: 2017/6/2 15:45 from abc import ABCMeta, abstractmethod class Payment(metaclass=ABCMeta): @abstractmethod def pay(self, money): pass class AliPay(Payment):工廠方法模式樣例def __init__(self,enabled_yue=False): self.enabled_yue = enabled_yue def pay(self, money): if self.enabled_yue: print("支付寶余額支付%s元" % money) else: print("支付寶支付%s元" % money) class ApplePay(Payment): def pay(self, money): print("蘋果支付支付%s元" % money) class WechatPay(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 AppleFactory(PaymentFactory): def create_payment(self): return ApplePay() class WechatFactory(PaymentFactory): def create_payment(self): return WechatPay() f = AlipayFactory() p = f.create_payment() p.pay(100)
七、UML圖
工廠方法模式