抽象工廠模式 python版

2021-09-07 22:46:03 字數 3998 閱讀 3646

抽象工廠模式:提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。

優點:易於交換「產品系列」,只要更改相應的工廠即可。

缺點:建立產品的時候很繁瑣,需要增加和修改很多東西。

優化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...