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 相关文章推荐
利用soaplib搭建webservice详细步骤和实例代码
Nov 20 Python
分享15个最受欢迎的Python开源框架
Jul 13 Python
Python中实现结构相似的函数调用方法
Mar 10 Python
使用C语言扩展Python程序的简单入门指引
Apr 14 Python
bat和python批量重命名文件的实现代码
May 19 Python
win系统下为Python3.5安装flask-mongoengine 库
Dec 20 Python
python实现爬取图书封面
Jul 05 Python
python3.7简单的爬虫实例详解
Jul 08 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
Python求解排列中的逆序数个数实例
May 03 Python
python 多线程爬取壁纸网站的示例
Feb 20 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学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
2019/04/15 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
Python计算回文数的方法
2015/03/11 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
Python numpy线性代数用法实例解析
2019/11/15 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
如何用border-image实现文字气泡边框的示例代码
2020/01/21 HTML / CSS
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
中软Java笔试题
2012/11/11 面试题
中秋寄语大全
2014/04/11 职场文书
机关作风建设自查报告
2014/10/22 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫
python运行脚本文件的三种方法实例
2022/06/25 Python
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技