zoukankan      html  css  js  c++  java
  • 浅谈Python设计模式

      声明:本系列文章主要参考《精通Python设计模式》一书,并且参考一些资料,结合自己的一些看法来总结而来。

      工厂模式:

        顾名思义,工厂则是根据提供的不同的材料,生产出不同的产品。那么在编程的设计模式,根据提供不同的用户输入,调用相同的接口,得出不同的结果。

      示例一:

      在编写一个web框架时,我们需要考虑到用户可能会连接各种各样的数据库,但是我们不能预知用户会使用哪个数据库。于是我们提供一个通用方法,里面包含了各个数据库的连接方案,用户在使用过程中,只需要传入数据库的名字并给出连接所需要的信息,即可得到一个固定的 | 针对用户所选数据库的 | 连接字符串。

      代码:

    def connect(db, *arg, **kwargs):  
        db = db.lower()
        dbname = kwargs['db']
    
        if db == 'mysql':
            result = "mysql+pymysql://{username}:{password}@{server}/{dbname}".format(username = kwargs['username'], password = kwargs['password'], server = kwargs['server'], dbname=dbname)
        elif db == 'postgresql:
            result = 'postgresql://{username}:{passwrod}@{server}/{dbname}'.format(susername = kwargs['username'], password = kwargs['password'], server = kwargs['server'], dbname=dbname)
    
        return result

      可以看到:

      如果用户的输入为 'MySQL', 那么工厂方法会为其返回一个用于连接 MySQL 数据库的连接字符串;(使用pymysql进行连接)

      如果用户的输入为 'postgresql',那么将会得到一个用于连接 postgresql数据库的连接字符串;更多的则是同样的原理。(安装psycopg2进行连接)。

     

      如上面那个示例你还没有看懂,那么继续看下面这个案例:

      在实际开发过程中,分为生产模式和开发模式,那么我也可以通过工厂模式,在不同的模式下通过输出不同的命令,调用相同的接口完成 不同环境下的配置实现。

      示例二:

    # 在config.py模块下
    class Config(object):
        # 放置两种模式下共同的配置
        pass 
    
    class DevelopConfig(Config):
        DEBUG = True
        LOG_LEVEL = logging.DEBUG
    
    class ProductConfig(Config):
        LOG_LEVEL = logging.ERROR
    
    
    config = {
        "development": DevelopConfig,
        "production": ProductConfig
    }
    
    
    # __init__.py模块下
    def create_app(config_name):
        app = Flask(__name__)
        app.config.from_object(config[config_name])

      也就是说:

      当输入“development”,则加载开发环境的配置文件,而输入“production”,则加载生产环境下的配置文件。

     以上就是工厂模式:

      总结:其实这个方法非常初级非常暴力,就是无限的罗列需要考虑的情况并给出对应的处理而已。

      

      over~~~~~~~

      

  • 相关阅读:
    Spring Boot & ES 实战,值得参考!
    什么是 Java 对象深拷贝?面试必问!
    一份完整的 MySQL 开发规范,进大厂必看!
    ASP.NET + MVC5 入门完整教程五 --- Razor (模型与布局)
    C# MVC扩展方法
    C#泛型应用及原理
    部分类及部分方法
    程序集
    类的可访问属性
    ASP.NET + MVC5 入门完整教程四---MVC 中使用扩展方法
  • 原文地址:https://www.cnblogs.com/littlefivebolg/p/9927825.html
Copyright © 2011-2022 走看看