抽象工廠模式:提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。
優點:易於交換「產品系列」,只要更改相應的工廠即可。
缺點:建立產品的時候很繁瑣,需要增加和修改很多東西。
優化1:為了避免客戶端有過多的邏輯判斷,可以封裝出乙個簡單工廠類來生成產品類。
優化2:為了減少簡單工廠類裡面的邏輯判斷,可以採用「反射」機制,直接根據外部的配置檔案讀取出需要使用產品類的資訊。
[python]view plain
copy
#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 sqlserve***ctory(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 = sqlserve***ctory()
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();
抽象工廠模式(java版)
抽象工廠模式 abstract factory pattern 是圍繞乙個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。每乙個模式都是針對一定問題的解決方案,工廠方法模式針對的是乙個產品等級結構 而抽象工廠模式針對的是多個產品...
抽象工廠模式(python)
抽象工廠模式 與簡單工廠模式的最主要區別是,簡單工廠模式在工廠類中包含了邏輯判斷,能夠根據客戶端的選擇條件來動態建立物件,解除了客戶端 對應用的依賴。但是,在新增新的邏輯時,需要修改工廠類,違反了開放 封閉原則。抽象工廠模式建立了乙個抽象工廠,並由此建立了多個子工廠,乙個子工廠對應乙個型別的例項物件...
python 抽象工廠模式
例子 生產一部手機,需要手機殼 cpu 作業系統三類物件進行組裝,其中每類物件有不同的種類,對每個具體工廠,分別生產一部手機所需要的三個物件 相比工廠方法模式,抽象工廠模式中的每個具體工廠都生產一套產品 給一套系統做過限制 mifactory huaweifactory 抽象工廠模式 from ab...