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解析发往本机的数据包示例 (解析数据包)
Jan 16 Python
用Python中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
Python3实现并发检验代理池地址的方法
Sep 18 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
Python输出带颜色的字符串实例
Oct 10 Python
深入理解Python分布式爬虫原理
Nov 23 Python
python爬虫获取京东手机图片的图文教程
Dec 29 Python
用uWSGI和Nginx部署Flask项目的方法示例
May 05 Python
django 类视图的使用方法详解
Jul 24 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
python爬取音频下载的示例代码
Oct 19 Python
Python中递归以及递归遍历目录详解
Oct 24 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初学者头疼问题总结
2006/10/09 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
jQuery最佳实践完整篇
2011/08/20 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
nodejs学习笔记之路由
2017/03/27 NodeJs
js实现关闭网页出现是否离开提示
2017/12/07 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
python config文件的读写操作示例
2019/09/27 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
一些高难度的SQL面试题
2016/11/29 面试题
通用C#笔试题附答案
2016/11/26 面试题
公司保密承诺书
2014/03/27 职场文书
升国旗演讲稿
2014/09/05 职场文书
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS