Python设计模式之抽象工厂模式原理与用法详解
程序员文章站
2023-11-13 19:21:10
本文实例讲述了python设计模式之抽象工厂模式原理与用法。分享给大家供大家参考,具体如下:
抽象工厂模式(abstract factory pattern):提供一个创...
本文实例讲述了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程序设计有所帮助。
上一篇: Oracle数据库技术(38)
下一篇: PHP获取数组最后一个值的2种方法