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标准异常和异常处理详解
Feb 02 Python
python实现发送和获取手机短信验证码
Jan 15 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
python使用Tesseract库识别验证
Mar 21 Python
python pandas 如何替换某列的一个值
Jun 09 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
python 求某条线上特定x值或y值的点坐标方法
Jul 09 Python
python提取xml里面的链接源码详解
Oct 15 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 Python
如何基于windows实现python定时爬虫
May 01 Python
Pycharm配置autopep8实现流程解析
Nov 28 Python
Python tkinter实现日期选择器
Feb 22 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读取PDF内容配合Xpdf的使用
2012/11/24 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
2019/05/21 PHP
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
vue 2.0封装model组件的方法
2017/08/03 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
详解vuex状态管理模式
2018/11/01 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
Python字典的核心底层原理讲解
2019/01/24 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
python实现图像拼接
2020/03/05 Python
python os模块在系统管理中的应用
2020/06/22 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
文明村镇申报材料
2014/05/06 职场文书
服务行业口号
2014/06/11 职场文书
党支部特色活动方案
2014/08/20 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
个人存款证明书
2014/10/18 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang