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 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
用Python从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
python制作最美应用的爬虫
Oct 28 Python
使用NumPy和pandas对CSV文件进行写操作的实例
Jun 14 Python
django session完成状态保持的方法
Nov 27 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
python使用PIL和matplotlib获取图片像素点并合并解析
Sep 10 Python
python argparser的具体使用
Nov 10 Python
pytorch常见的Tensor类型详解
Jan 15 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
python 读取.nii格式图像实例
Jul 01 Python
Python自然语言处理之切分算法详解
Apr 25 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数据代码
2008/06/05 PHP
Cannot modify header information错误解决方法
2008/10/08 PHP
php define的第二个参数使用方法
2013/11/04 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
js实现随机数小游戏
2019/06/28 Javascript
pandas的qcut()方法详解
2019/07/06 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
Python多线程thread及模块使用实例
2020/04/28 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
联想台湾官网:Lenovo TW
2018/05/09 全球购物
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
struct与class的区别
2014/02/03 面试题
智乐游戏测试笔试题
2014/05/21 面试题
给物业的表扬信
2014/01/21 职场文书
校园安全广播稿
2014/02/08 职场文书
会计系毕业求职信
2014/08/07 职场文书
教师先进个人材料
2014/12/17 职场文书
升职感谢信
2015/01/22 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python