zoukankan      html  css  js  c++  java
  • 简单工厂模式

    一、内容

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

    二、角色

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

    三、优点

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

    四、缺点

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

    五、代码示例

     1 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)
  • 相关阅读:
    Bootstrap 2.2.2 的新特性
    Apache POI 3.9 发布,性能显著提升
    SQL Relay 0.48 发布,数据库中继器
    ProjectForge 4.2.0 发布,项目管理系统
    红帽企业 Linux 发布 6.4 Beta 版本
    红薯 快速的 MySQL 本地和远程密码破解
    MariaDB 宣布成立基金会
    Percona XtraBackup 2.0.4 发布
    Rocks 6.1 发布,光盘机群解决方案
    精通Servlet研究,HttpServlet的实现追究
  • 原文地址:https://www.cnblogs.com/morgana/p/8495634.html
Copyright © 2011-2022 走看看