抽象工厂模式(python版)
来源:互联网 发布:php错误类型有哪些 编辑:程序博客网 时间:2024/04/28 18:58
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
优点:易于交换“产品系列”,只要更改相应的工厂即可。
缺点:建立产品的时候很繁琐,需要增加和修改很多东西。
优化1:为了避免客户端有过多的逻辑判断,可以封装出一个简单工厂类来生成产品类。
优化2:为了减少简单工厂类里面的逻辑判断,可以采用“反射”机制,直接根据外部的配置文件读取出需要使用产品类的信息。
优点:易于交换“产品系列”,只要更改相应的工厂即可。
缺点:建立产品的时候很繁琐,需要增加和修改很多东西。
优化1:为了避免客户端有过多的逻辑判断,可以封装出一个简单工厂类来生成产品类。
优化2:为了减少简单工厂类里面的逻辑判断,可以采用“反射”机制,直接根据外部的配置文件读取出需要使用产品类的信息。
#encoding=utf-8##by panda#抽象工厂模式def printInfo(info): print unicode(info, 'utf-8').encode('gbk') #抽象产品A:user表class IUser(): def Insert(self): pass def GetUser(self): pass#sqlserver实现的Userclass SqlserverUser(IUser): def Insert(self): printInfo("在SQL Server中给User表增加一条记录") def GetUser(self): printInfo("在SQL Server中得到User表的一条记录")#Access实现的Userclass AccessUser(IUser): def Insert(self): printInfo("在Access中给User表增加一条记录") def GetUser(self): printInfo("在Access中得到User表一条记录")#抽象产品B:部门表class IDepartment(): def Insert(self): pass def GetUser(self): pass#sqlserver实现的Departmentclass SqlserverDepartment(IUser): def Insert(self): printInfo("在SQL Server中给Department表增加一条记录") def GetUser(self): printInfo("在SQL Server中得到Department表的一条记录")#Access实现的Departmentclass AccessDepartment(IUser): def Insert(self): printInfo("在Access中给Department表增加一条记录") def GetUser(self): printInfo("在Access中得到Department表一条记录")#抽象工厂class IFactory(): def CreateUser(self): pass def CreateDepartment(self): pass #sql server工厂class SqlServerFactory(IFactory): def CreateUser(self): return SqlserverUser() def CreateDepartment(self): return SqlserverDepartment()#access工厂class AccessFactory(IFactory): def CreateUser(self): return AccessUser() def CreateDepartment(self): return AccessDepartment() #优化一:采用一个简单工厂类,封装逻辑判断操作class DataAccess():# db = "Sqlserver" db = "Access" @staticmethod def CreateUser(): if (DataAccess.db == "Sqlserver"): return SqlserverUser() elif(DataAccess.db == "Access"): return AccessUser() @staticmethod def CreateDepartment(): if (DataAccess.db == "Sqlserver"): return SqlserverDepartment() elif(DataAccess.db == "Access"): return AccessDepartment() #优化二:采用反射机制,避免使用太多判断##以下信息可以从配置文件中获取DBType = 'Sqlserver' #'Access'DBTab_User = 'User'DBTab_Department = 'Department'class DataAccessPro():# db = "Sqlserver" db = "Access" @staticmethod def CreateUser(): funName = DBType + DBTab_User return eval(funName)() #eval 将其中的字符串转化为python表达式 @staticmethod def CreateDepartment(): funName = DBType + DBTab_Department return eval(funName)() def clientUI(): printInfo("\n--------抽象工厂方法--------") factory = SqlServerFactory() iu = factory.CreateUser() iu.Insert() iu.GetUser() id = factory.CreateDepartment() id.Insert() id.GetUser() printInfo("\n--抽象工厂方法+简单工厂方法--") iu = DataAccess.CreateUser() iu.Insert() iu.GetUser() id = DataAccess.CreateDepartment() id.Insert() id.GetUser() printInfo("\n-抽象工厂方法+简单工厂方法+反射-") iu = DataAccessPro.CreateUser() iu.Insert() iu.GetUser() id = DataAccessPro.CreateDepartment() id.Insert() id.GetUser() returnif __name__ == '__main__': clientUI();
类图:
- 抽象工厂模式(python版)
- Python抽象工厂模式
- 抽象工厂模式(python)
- Python抽象工厂模式实现
- 设计模式:抽象工厂模式(Python)
- python设计模式之抽象工厂模式
- Python设计模式(一)【抽象工厂模式】
- 设计模式-抽象工厂模式-abstractfactory-python
- python风格的抽象工厂模式
- Python设计模式——抽象工厂
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- android虚拟机中安装apk及apk项目中的导出--2
- How software developers fix defects (bugs) - QA point
- mongodb实战(1)
- ServletConfig和ServletContext
- 2011-10-18
- 抽象工厂模式(python版)
- 不用中间变量实现strlen函数
- 2 推荐器
- DIV
- java.lang.OutOfMemoryError: PermGen space及其解决方法
- 灰色十月
- 2011.10.18-servlet的细节
- Servlet的一些细节
- IPhone CGPathDrawingMode 模式详解