Python设计模式之抽象工厂模式原理与用法详解


Posted in Python onJanuary 15, 2019

本文实例讲述了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()

上面类的设计如下图:

Python设计模式之抽象工厂模式原理与用法详解

优点:

具体工厂类如MysqlFactory在一个应用中只需要初始化一次,这样改动一个具体工厂变得很容易,只需要改变具体工厂就可以改变整个产品的配置。

具体的创建实例过程与客户端分离,客户端通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中

缺点:在新增一个具体工厂就需要增加多个类才能实现

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python在windows命令行下输出彩色文字的方法
Mar 19 Python
Python 经典面试题 21 道【不可错过】
Sep 21 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
Python socket聊天脚本代码实例
Jan 02 Python
Python基于httpx模块实现发送请求
Jul 07 Python
Python如何测试stdout输出
Aug 10 Python
python tqdm库的使用
Nov 30 Python
python中最小二乘法详细讲解
Feb 19 Python
如何使用PyCharm及常用配置详解
Jun 03 Python
使用Python获取字典键对应值的方法
Apr 26 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 #Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 #Python
python调用opencv实现猫脸检测功能
Jan 15 #Python
python可视化实现代码
Jan 15 #Python
Python饼状图的绘制实例
Jan 15 #Python
Python设计模式之状态模式原理与用法详解
Jan 15 #Python
Python设计模式之适配器模式原理与用法详解
Jan 15 #Python
You might like
php入门之连接mysql数据库的一个类
2012/04/21 PHP
PHP数组循环操作详细介绍 附实例代码
2013/02/03 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
PHP7 list() 函数修改
2021/03/09 PHP
javascript之dhDataGrid Ver2.0.0代码
2007/07/01 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
JavaScript之WebSocket技术详解
2016/11/18 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
详解vue组件基础
2018/05/04 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
Python常用小技巧总结
2015/06/01 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
Django框架请求生命周期实现原理
2020/11/13 Python
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
绘儿乐产品官方在线商店:Crayola.com
2019/09/07 全球购物
社区母亲节活动方案
2014/03/05 职场文书
离婚案件被告代理词
2015/05/23 职场文书
个人工作决心书
2015/09/22 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
python周期任务调度工具Schedule使用详解
2021/11/23 Python