浅谈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~~~~~~~
浅谈Python设计模式 - 工厂模式的更多相关文章
- 浅谈Python设计模式 - 外观模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 外观模式 外观模式的核心在于将复杂的内部实现包装起来,只向外界提供简单的调用接口 ...
- 浅谈Python设计模式 - 建造者模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 建造者模式 当我们想要创建一个由多个部分构成的对象,而且他们的构建需要一步接一步 ...
- 浅谈Python设计模式 - 代理模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 一.在某些应用中,我们想要在访问某个对象之前执行一个或者多个重要的操作,例如,访 ...
- 浅谈Python设计模式 - 原型模式
声明,本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在<精通Python设计模式>中把设计模式分为三种类型: 创建型模式 ...
- 浅谈Python设计模式 - 抽象工厂模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...
- 浅谈Python设计模式 -- 责任链模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 之前在最开始就聊了Python设计模式有三种,其中关于创建型和结构型设计模式基本 ...
- 浅谈Python设计模式 - 享元模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 享元模式: 享元模式是一种用于解决资源和性能压力时会使用到的设计模式,它的核心思 ...
- 浅谈js抽象工厂模式
一.简单工厂 定义:简单工厂模式中,可以根据参数的不同返回不同类的实例.简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 比如你去专门卖鼠标的地方你可以买各种各样的 ...
- 浅谈Python设计模式 - 适配器模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 从本篇便开始介绍结构型设计模式,而适配器设计模式便是该类设计模式的一种,那么什么 ...
随机推荐
- spark基础知识三
主要围绕spark的底层核心抽象RDD和原理进行理解.主要包括以下几个方面 RDD弹性分布式数据集的依赖关系 RDD弹性分布式数据集的lineage血统机制 RDD弹性分布式数据集的缓存机制 spar ...
- Java class 和public class 区别
1.类的访问权限 为了控制某个类的访问权限,修饰词必须出现在关键字class之前.例如:public class Student {} 在编写类的时候可以使用两种方式定义类: (A)pub ...
- 三天精通Vue--Vue的常用语法
Vue的介绍 官网教程:https://cn.vuejs.org/v2/guide/installation.html 掘金:https://juejin.im/ cdn(在线的网络连接资源):htt ...
- Java 抽象类 抽象方法 接口
#抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化 ...
- BeanPostProcessor
BeanPostProcessor简介 BeanPostProcessor是Spring IOC容器给我们提供的一个扩展接口.接口声明如下: public interface BeanPostProc ...
- 2018-2019-2 20165315《网络对抗技术》Exp 8 Web基础
2018-2019-2 20165315<网络对抗技术>Exp 8 Web基础 一.实验内容 Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST ...
- 【K8S】Kubernetes: --image-pull-policy always does not work
https://stackoverflow.com/questions/45905999/kubernetes-image-pull-policy-always-does-not-work
- Maven 教程(9)— Maven坐标详解
原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79544532 Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种j ...
- 码医自学法V2.2(附名老中医)
这段时间经常有网友微信公众号问我怎么入门'中医' 我贴下我自己的学习方法(仅供参考) 基础回顾:https://www.cnblogs.com/dunitian/p/7483038.html PS:自 ...
- linux免费https证书申请教程
linux免费https证书申请教程直接去阿里云 菜单有个证书服务进去有个购买证书菜单 选择免费的 然后会提示写个人资料 然后系统生成csr 然后提交审核这个时候会有份邮件 文件下载上传到你的服务器 ...