抽象工廠模式是常見的建造型設計模式之一,比工廠方法模式抽象程度更高。工廠方法模式中具體工廠只生產一種具體產品,但在抽象工廠模式中,具體工廠可以生產相關的一組具體產品,這樣一組產品稱為產品族,產品族中的每乙個產品分屬於某一產品繼承等級結構。
有時候我們需要乙個工廠提供多個產品物件,而不是單一乙個產品物件,如乙個電器裝置工廠,它可以生產電視機、電冰箱、空調等裝置,而不只是生成某種型別的電器。為了更清晰地理解抽象工廠模式,這裡先引入兩個概念:
產品等級結構:產品等級結構即產品的繼承結構,如乙個抽象類是電視機,其子類有海爾電視機、tcl電視機等,抽象電視機與具體品牌電視機之間構成了乙個產品等級結構。
產品族:指由同一工廠生產的,位於不同產品等級結構中的一組產品,如海爾電器工廠生產海爾電視機、海爾電冰箱,則它們是同一產品族,各自位於不同產品等級結構。
當系統提供的工廠生產的具體產品不是乙個簡單物件,而是多個位於不同產品等級結構中屬於不同型別的具體產品時需要使用抽象工廠模式。
提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。
abstractfacory(抽象工廠)
抽象工廠用於宣告生產抽象產品的方法,在乙個抽象工廠中可以定義一組方法,每一方法對應乙個產品等級結構
concretefactory(具體工廠)
具體工廠實現抽象工廠宣告的生產抽象產品的方法,生產一組具體產品,這些產品構成乙個產品族,每乙個產品都位於某個產品等級結構中。
abstractproduct(抽象產品)
抽象產品為每種產品宣告介面,在抽象產品中定義產品的抽象業務方法
concreteproduct(具體產品)
具體產品定義具體工廠生產的具體產品物件,實現抽象產品介面中定義的業務方法。
例項說明
乙個電器工廠可以產生多種型別的電器,如海爾工廠可以生產海爾電視機、海爾空調等,tcl工廠可以生產tcl電視機、tcl空調等,相同品牌的電器構成乙個產品族,而相同型別電器構成乙個產品等級結構。
例項**及解釋
抽象產品類television
public inte***ce television
具體產品類hairtelevision(海爾電視機類)
public class hairtelevision implements television
}
具體產品類tcltelevision(tcl電視機類)
public class tcltelevision implements television
}
抽象產品類airconditioner
public inte***ce airconditioner
具體產品類hairairconditioner(海爾空調類)
public class hairairconditioner implements airconditioner
}
具體產品類tclairconditioner(tcl空調類)
public class tclairconditioner implements airconditioner
}
抽象工廠類efactory
public inte***ce efactory
具體工廠類hai***ctory(海爾工廠類)
public class hai***ctory implements efactory
@override
public airconditioner produceairconditioner()
}
具體工廠類tclpfactory
public class tclfactory implements efactory
@override
public airconditioner produceairconditioner()
}
xml操作工具類
public class xmlutil
}
配置檔案
<?xml version="1.0" encoding="utf-8" ?>
hai***ctory
測試類
public class test
}
結果分析
如果需要增加新品牌的電器,即增加乙個新的產品族,如增加海信電視機和海信空調,則只需對應增加乙個具體工廠,再將配置檔案中具體工廠類名修改為新增工廠類名,原有**無須修改。但如果要增加新的產品,如增加新的電器產品洗衣機,抽象工廠需要宣告乙個生產洗衣機的方法,所有具體工廠類都需實現該方法,將導致系統不再符合開閉原則。
設計模式(六) 抽象工廠模式
例 最基本的資料訪問程式 class user public string getname class sqlserveruser public user getuser int id public class main sqlserveruser su new sqlserveruser 使得su...
設計模式學習筆記(六) 抽象工廠模式
在了解抽象工廠模式之前,首先來了解一下兩個術語 產品等級結構也就是產品的繼承結構,例如乙個抽象類是電視機,子類有不同品牌的電視機,比如海爾電視機,海信電視機,tcl電視機,而抽象電視機與具體品牌的電視機之間構成了乙個產品等級結構,抽象電視機是父類,而具體品牌的電視機是子類。產品族是指由乙個同乙個工廠...
軟體設計模式 簡單工廠模式
軟體體系結構與設計模式相關相關知識 客戶端直接通過car類的子類實現相關功能 1 高度耦合 2 條件語句塊需要寫在客戶端內,特別難看 3 客戶程式需要知道服務類的全部的細節才能實現使用工廠模式,將選擇與初始化乙個合適的類,將功能封裝在這個類當中的專門的方法當中 強調 委託的思想,客戶不需要知道服務的...