码迷,mamicode.com
首页 > 其他好文 > 详细

简单工厂模式

时间:2019-08-09 13:17:21      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:支付宝支付   create   err   crete   模式   abc   示例   直接   name   

一、内容

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

二、角色

工厂角色(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)

 

简单工厂模式

标签:支付宝支付   create   err   crete   模式   abc   示例   直接   name   

原文地址:https://www.cnblogs.com/zcfx/p/11326523.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!