Python设计模式之抽象工厂模式原理与用法详解
作者:Andy冉明 发布时间:2023-01-25 16:05:43
标签:Python,设计模式,抽象工厂模式
本文实例讲述了Python设计模式之抽象工厂模式原理与用法。分享给大家供大家参考,具体如下:
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的类
下面是一个抽象工厂的demo:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——抽象工厂模式
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的类
"""
import sys
#抽象用户表类
class User(object):
def get_user(self):
pass
def insert_user(self):
pass
#抽象部门表类
class Department(object):
def get_department(self):
pass
def insert_department(self):
pass
#操作具体User数据库类-Mysql
class MysqlUser(User):
def get_user(self):
print 'MysqlUser get User'
def insert_user(self):
print 'MysqlUser insert User'
#操作具体Department数据库类-Mysql
class MysqlDepartment(Department):
def get_department(self):
print 'MysqlDepartment get department'
def insert_department(self):
print 'MysqlDepartment insert department'
#操作具体User数据库-Orcal
class OrcaleUser(User):
def get_user(self):
print 'OrcalUser get User'
def insert_user(self):
print 'OrcalUser insert User'
#操作具体Department数据库类-Orcal
class OrcaleDepartment(Department):
def get_department(self):
print 'OrcalDepartment get department'
def insert_department(self):
print 'OrcalDepartment insert department'
#抽象工厂类
class AbstractFactory(object):
def create_user(self):
pass
def create_department(self):
pass
class MysqlFactory(AbstractFactory):
def create_user(self):
return MysqlUser()
def create_department(self):
return MysqlDepartment()
class OrcaleFactory(AbstractFactory):
def create_user(self):
return OrcaleUser()
def create_department(self):
return OrcaleDepartment()
if __name__ == "__main__":
db = sys.argv[1]
myfactory = ''
if db == 'Mysql':
myfactory = MysqlFactory()
elif db == 'Orcal':
myfactory = OrcaleFactory()
else:
print "不支持的数据库类型"
exit(0)
user = myfactory.create_user()
department = myfactory.create_department()
user.insert_user()
user.get_user()
department.insert_department()
department.get_department()
上面类的设计如下图:
优点:
具体工厂类如MysqlFactory在一个应用中只需要初始化一次,这样改动一个具体工厂变得很容易,只需要改变具体工厂就可以改变整个产品的配置。
具体的创建实例过程与客户端分离,客户端通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中
缺点:在新增一个具体工厂就需要增加多个类才能实现
希望本文所述对大家Python程序设计有所帮助。
来源:https://www.cnblogs.com/onepiece-andy/p/python-abstract-factory-pattern.html


猜你喜欢
- Go 程序的性能优化及 pprof 的使用程序的性能优化无非就是对程序占用资源的优化。对于服务器而言,最重要的两项资源莫过于 CPU 和内存
- 对于电脑上没有Visual C++ 2019.exe 而导致安装不了Mysql Install的朋友,此详细步骤会更加明了。一、下载(官方网
- 一、读者指引 读者指引帮助你掌握本文的梗概。以免你看了大半才明白这编文章不适合你,给你造成视觉污染。如果你正在用ASP+XML写一些程序,或
- 背景:有时候我们需要在服务器上同时运行多个程式,但是却需要一个一个的打开,比较费时间,而且一旦服务器重启后,不懂程式运行的人受限于环境及代码
- 目的是为了检测出采集数据中的异常值。所以很明确,这种情况下的簇为2:正常数据和异常数据两大类1、安装相应的库import matplotli
- 需要安装的python库使用python编写程序进行测试MQTT的发布和订阅功能。首先要安装:pip install paho-mqtt测试
- 写了一段时间java切回写python偶尔会出现一些小麻烦,比如:在java中自定义对象变成json串很简单,调用一个方法就行,但同样的转换
- 本文实例讲述了python中__call__内置函数的用法。分享给大家供大家参考。具体分析如下:对象通过提供__call__(slef, [
- Windows下将gvim8配置为Python IDE大概分为以下四步,每步介绍的都非常详细,一起看看吧。1.准备工作将下面的安装包或者文件
- print函数是Python的入门,每一个学习python的人都绕不开这个函数,下面介绍一下这个函数的用法。打开电脑,选择python软件,
- 目录1. 现实背景2. 约定3. 配置 master3.1. 配置启动参数3.2. 重启服务使参数生效3.3. 以 root 身份登录,创建
- 在MySQL里,聚集索引和非聚集索引分别是什么意思,有什么区别?在MySQL中,InnoDB引擎表是(聚集)索引组织表(clustered
- 但有时候,需要当某事件触发时,我们先做一些操作,然后再跳转,这时,就要用JAVASCRIPT来实现这一跳转功能。 下面是具体的做法: 一:跳
- 1.自定义线程池import threadingimport Queueimport timequeue = Queue.Queue()de
- 说明1、需要一个函数来处理的参数数是不确定的,这时可以使用多值参数。2、python有两个多值参数,在参数名前增加一个*可以接收元组。在参数
- 本文实例为大家分享了vue+AI智能机器人回复的具体代码,供大家参考,具体内容如下操作步骤引入前端代码前端代码是参考github上的一个开源
- 何为共线性:共线性问题指的是输入的自变量之间存在较高的线性相关度。共线性问题会导致回归模型的稳定性和准确性大大降低,另外,过多无关的维度计算
- 描述返回表达式,此表达式已被格式化为日期或时间。语法FormatDateTime(Date[, NamedFormat])FormatDat
- 程序只要在运行,就免不了会出现错误,错误很常见,比如Error,Notice,Warning等等。在PHP中,主要有以下3种错误类型。1.注
- python启用多线程后,调用exit出现无法退出的情况,原因是exit会抛出Systemexit的异常,如果在exit外围调用了try,就