Python设计模式之抽象工厂模式原理与用法详解
本文实例讲述了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()
上面类的设计如下图:
优点:
具体工厂类如MysqlFactory在一个应用中只需要初始化一次,这样改动一个具体工厂变得很容易,只需要改变具体工厂就可以改变整个产品的配置。
具体的创建实例过程与客户端分离,客户端通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中
缺点:在新增一个具体工厂就需要增加多个类才能实现
更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
相关文章
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
今天小编就为大家分享一篇Django 忘记管理员或忘记管理员密码 重设登录密码的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-05-05pydantic-resolve嵌套数据结构生成LoaderDepend管理contextvars
这篇文章主要为大家介绍了pydantic-resolve解决嵌套数据结构生成LoaderDepend管理contextvars的使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>2023-04-04python3.9安装RobotFramework的简单教程
python3.9安装RobotFramework,不同于python2.7和python3.6,使用这两个版本安装会出现问题,因为我安装遇到问题发现没有最新的教程,所以打算自己写一个,同时下面会记录安装步骤及使用的方法会出现的一些问题,对python3.9安装RobotFramework感兴趣的朋友一起看看吧2023-01-01
最新评论