简单工厂模式

Posted zcfx

tags:

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

一、内容

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

二、角色

工厂角色(Creator)
抽象产品角色(Product)
具体产品角色(Concrete Product)

三、优点

隐藏了对象创建的实现细节
客户端不需要修改代码

四、缺点

违反了单一职责原则,将创建逻辑集中到一个工厂类中
当添加新产品时,需要修改工厂类代码,违反了开放封闭原则

五、代码示例

初始的代码

from abc import abstractmethod,ABCMeta
 2 class Payment(metaclass=ABCMeta):
 3     @abstractmethod
 4     def pay(self):
 5         pass
 6 
 7 class Alipay(Payment):
 8     def __init__(self,money):
 9         self.money = money
10 
11     def pay(self):
12         print(支付宝支付了%s元%self.money)
13 
14 class Whatpay(Payment):
15     def __init__(self, money):
16         self.money = money
17 
18     def pay(self):
19         print(微信支付了%s元 % self.money)
20 
21 
22 obj = Alipay(100)
23 obj.pay()
24 
25 obj2 = Whatpay(200)
26 obj2.pay()
from abc import abstractmethod,ABCMeta
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 Yuebao(Payment):
    def pay(self,money):
        print(余额宝支付了%s元 %money)


class PaymentFactory:
    ‘‘‘工厂类:封装了对象创建的细节‘‘‘
    def create_payment(self,method):
        if method ==alipay:
            return Alipay()
        elif method ==applepay:
            return Applepay()
        elif method ==yuebao:
            return Yuebao()
        else:
            return NameError(method)

factory = PaymentFactory()
alipay=factory.create_payment(yuebao)
alipay.pay(100)

 

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

工厂模式-简单工厂

设计模式从青铜到王者第五篇:创建型模式之简单工厂模式( Simple Factory Pattern )

02 简单工厂模式

对比总结三个工厂模式(简单工厂,工厂方法,抽象工厂)

iOS经常使用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

设计模式—— 简单工厂