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 21 Python
老生常谈Python进阶之装饰器
May 11 Python
Python实现的手机号归属地相关信息查询功能示例
Jun 08 Python
django_orm查询性能优化方法
Aug 20 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
Jun 19 Python
python matplotlib库绘制散点图例题解析
Aug 10 Python
Python属性和内建属性实例解析
Jan 14 Python
Python多重继承之菱形继承的实例详解
Feb 12 Python
Tensorflow之梯度裁剪的实现示例
Mar 08 Python
Python 如何反方向迭代一个序列
Jul 28 Python
Python制作动态字符画的源码
Aug 04 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的PSR规范中文版
2013/09/28 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
JavaScript 参考教程
2006/12/29 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
python函数与方法的区别总结
2019/06/23 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
入职担保书范文
2014/05/21 职场文书
大学生村官个人总结
2015/02/15 职场文书
企业战略合作意向书
2015/05/08 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js