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中的True,False条件判断实例分析
Jan 12 Python
用Python编写脚本使IE实现代理上网的教程
Apr 23 Python
剖析Django中模版标签的解析与参数传递
Jul 21 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
Nov 18 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
python for 循环获取index索引的方法
Feb 01 Python
详解python中init方法和随机数方法
Mar 13 Python
Python笔记之代理模式
Nov 20 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 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
Snoopy类使用小例子
2008/04/15 PHP
PHP中strtotime函数使用方法详解
2011/11/27 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
python计算对角线有理函数插值的方法
2015/05/07 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
python中的for循环
2018/09/28 Python
Python按钮的响应事件详解
2019/03/04 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
Linux的文件类型
2012/03/07 面试题
优秀毕业生求职信
2014/06/05 职场文书
辞职书格式样本
2015/02/26 职场文书
消防隐患整改通知书
2015/04/22 职场文书
python如何将mat文件转为png
2022/07/15 Python