定義:不直接向客戶暴露對象建立的實現細節,而是經過一個工廠類來負責建立產品類的實例。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)