ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

工厂方法模式

2019-08-09 12:52:53  阅读:138  来源: 互联网

标签:pay self 模式 工厂 create 方法 class def


一、内容

定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪一个产品类

二、角色

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

工厂方法模式相比简单工厂模式将每个具体产品都对应一个具体工厂

三、优点

  • 每个具体产品都对应一个具体工厂类,不需要修改工厂类代码
  • 隐藏了对象创建的实现细节

四、缺点

  • 每增加一个具体产品类,就必须增加一个相应的具体工厂类

五、使用场景

  • 需要生产多种、大量复杂对象的时候
  • 需要降低耦合度的时候
  • 当系统的产品种类需要经常扩展的时候  

六、代码示例

from abc import ABCMeta,abstractmethod
class PaymentFactory(metaclass=ABCMeta):
    @abstractmethod
    def create_payment(self):
        pass

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 AlipayFactory(PaymentFactory):
    def create_payment(self):
        return Alipay()

class AppleFactory(PaymentFactory):
    def create_payment(self):
        return Applepay()

apple = AppleFactory()
apple.create_payment().pay(100)

alipay = AlipayFactory()
alipay.create_payment().pay(300)

#输出
# 微信支付了100元
# 支付宝支付了300元

 

标签:pay,self,模式,工厂,create,方法,class,def
来源: https://www.cnblogs.com/zcfx/p/11326525.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有