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

    一、内容

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

    二、角色

    • 工厂角色(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)
    工厂模式样例
  • 相关阅读:
    排序算法(一)冒泡法
    java是传值还是传引用
    赫夫曼树与赫夫曼编码
    数据结构的相关概念
    字符集和字符编码的区别
    redis为什么选择单线程工作模型
    GET和POST请求的核心区别
    MySQL数据类型及后面小括号的意义
    java中的数据类型
    Jedis无法连接centOS7上的redis
  • 原文地址:https://www.cnblogs.com/skiler/p/6934998.html
Copyright © 2011-2022 走看看