抽象工厂模式(python版)
2011-10-18 21:13
309 查看
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
优点:易于交换“产品系列”,只要更改相应的工厂即可。
缺点:建立产品的时候很繁琐,需要增加和修改很多东西。
优化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实现的User class SqlserverUser(IUser): def Insert(self): printInfo("在SQL Server中给User表增加一条记录") def GetUser(self): printInfo("在SQL Server中得到User表的一条记录") #Access实现的User class 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实现的Department class SqlserverDepartment(IUser): def Insert(self): printInfo("在SQL Server中给Department表增加一条记录") def GetUser(self): printInfo("在SQL Server中得到Department表的一条记录") #Access实现的Department class 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() return if __name__ == '__main__': clientUI();
类图:
相关文章推荐
- Python抽象工厂模式实现
- 举例讲解Python设计模式编程的代理模式与抽象工厂模式
- Python抽象工厂模式
- 设计模式之-抽象工厂模式VS简单工厂模式(python)
- Python实现设计模式--03.抽象工厂模式(Abstract Factory Pattern)
- python风格的抽象工厂模式
- Python设计模式之抽象工厂模式
- python风格的抽象工厂模式
- 设计模式-抽象工厂模式-abstractfactory-python
- 设计模式之-抽象工厂模式VS简单工厂模式(python)
- [Python编程实战] 第一章 python的创建型设计模式1.1抽象工厂模式
- python 抽象工厂模式
- Python抽象工厂模式
- [Python设计模式] 第15章 如何兼容各种DB——抽象工厂模式
- 举例讲解Python设计模式编程中对抽象工厂模式的运用
- Python设计模式之抽象工厂模式
- python创建型设计模式学习——抽象工厂模式
- Python的创建型设计模式之抽象工厂模式
- 抽象工厂模式(python版)
- 举例讲解Python设计模式编程的代理模式与抽象工厂模式