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之使用Python查询更新数据库
Nov 25 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
python如何读写json数据
Mar 21 Python
Python多继承原理与用法示例
Aug 23 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
利用python 下载bilibili视频
Nov 13 Python
用python批量下载apk
Dec 29 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 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
Mysql的常用命令
2006/10/09 PHP
PHP二维数组的去重问题解析
2011/07/17 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
PHP图片加水印实现方法
2016/05/06 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
JS焦点图切换,上下翻转
2011/05/12 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
jQuery.Ajax()的data参数类型详解
2017/07/23 jQuery
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
Python中字符串的常见操作技巧总结
2016/07/28 Python
查看Django和flask版本的方法
2018/05/14 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
2018/12/16 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
遗体告别仪式主持词
2014/03/20 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
使用golang编写一个并发工作队列
2021/05/08 Golang
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers