1. 程式人生 > >工廠方法模式

工廠方法模式

工廠方法 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圖

技術分享

工廠方法模式