Python設計模式之抽象工廠模式原理與用法詳解

2022-10-03 18:12:11 字數 2574 閱讀 6926

抽象工廠模式(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_dymgwtepartment(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 'orcaldepart get department'

def insert_department(self):

print 'orcaldepartment insert department'

#抽象工廠類

class abstractfactory(obje程式設計客棧ct):

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(

return orcaledepartment()

if __name__ == "__main__":

db = sys.ar**[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在乙個應用中只需要初始化一次,這樣改動乙個具體工廠變得很容易,只需要改變具體工廠就可以改變整個產品的配置。

具體的建立例項過程與客戶端分離,客戶端通過他們的抽象介面程式設計客棧操縱例項,產品的具體類名也被具體工廠的實現分離,不會出現在客戶端**中

缺點:在新增乙個具體工廠就需要增加多個類才能實現

設計模式之工廠 抽象工廠

一 應用場景 工廠模式應用非常廣泛,意在抽象出一層專職管理物件產生以及物件間的關係,讓我們能夠專注於業務開發 1.不用去寫許許多多的new方法,替換實現類還得挨個修改。2.類中不涉及實現類,物件間只存在介面級別的耦合,客戶端呼叫注入實現類即可。由於工廠模式變種非常多,這裡只講一下常用的簡單工廠和抽象...

抽象工廠模式 設計模式3之抽象工廠模式

工廠方法模式中工廠只負責同類產品的生產。比如電視機工廠不應該生產汽車。然而現實生活中有很多綜合型的工廠,比如有些電視工廠不僅生產電視機,還會生產與之配套的機頂盒。那麼抽象工廠模式隨之誕生,這種模式將考慮多種型別產品的生產。我們總結下 工廠方法模式只考慮成產同一等級級的產品抽象方法模式考慮生產多等級的...

設計模式 之 抽象工廠

及我們知道,在工廠方法中,每個 creator,只是建立單一的例項,那對於一次要建立n多不同的類例項的情況呢?及,如果我們要實現這樣的方法呢?using system using system.collections.generic using system.text namespace 工廠方法 ...