简单工厂模式

Posted skiler

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单工厂模式相关的知识,希望对你有一定的参考价值。

一、内容

不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来创建产品类的实例

二、角色

  • 工厂角色(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:
    def create_payment(self, method):
        if method == alipay:
            return AliPay(enabled_yue=True)
        elif method == "applepay":
            return ApplePay()
        elif method == "wechatpay":
            return WechatPay()
        else:
            raise NameError(method)


f = PaymentFactory()
p = f.create_payment(alipay)
p.pay(100)
工厂模式样例

 

以上是关于简单工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

PHP面向对象之选择工厂和更新工厂

设计模式-简单工厂工厂方法模式抽象工厂模式详解

设计模式之简单工厂模式

C++工厂模式(简单工厂工厂方法抽象工厂)

C++工厂模式(简单工厂工厂方法抽象工厂)