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中使用Beautiful Soup库的超详细教程
Apr 30 Python
Python3控制路由器——使用requests重启极路由.py
May 11 Python
python对象及面向对象技术详解
Jul 19 Python
python opencv检测目标颜色的实例讲解
Apr 02 Python
图解Python变量与赋值
Apr 03 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
Python脚本完成post接口测试的实例
Dec 17 Python
linux环境中没有网络怎么下载python
Jul 07 Python
NumPy统计函数的实现方法
Jan 21 Python
linux 下selenium chrome使用详解
Apr 02 Python
Python过滤掉numpy.array中非nan数据实例
Jun 08 Python
详解python中GPU版本的opencv常用方法介绍
Jul 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 $_ENV为空的原因分析
2009/06/01 PHP
使用php实现截取指定长度
2013/08/06 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
jQuery大于号(>)选择器的作用解释
2015/01/13 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
ES6的新特性概览
2016/03/10 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
Ant design vue中的联动选择取消操作
2020/10/31 Javascript
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
Python3 pickle对象串行化代码实例解析
2020/03/23 Python
Python中的整除和取模实例
2020/06/03 Python
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
医学院学生的自我评价分享
2013/11/19 职场文书
网络书店创业计划书
2014/02/07 职场文书
资金主管岗位职责范本
2014/03/04 职场文书
学校火灾防控方案
2014/06/09 职场文书
2015年护士节慰问信
2015/03/23 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
DE1103使用报告
2022/04/05 无线电
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS