抽象工廠模式的目的
創(chuàng)建對像,在工廠方法模式中基协,一個工廠只生產(chǎn)一種對象歌亲,當(dāng)產(chǎn)品對象過多時,會產(chǎn)生比較多的工廠類.而且實際生產(chǎn)中澜驮,一個工廠也不僅僅生產(chǎn)一種產(chǎn)品陷揪,而是生產(chǎn)一類產(chǎn)品,比如一個家電廠杂穷,可能會生產(chǎn)電視悍缠,洗衣機,電冰箱等產(chǎn)品.在抽象工廠模式中耐量,一個工廠可以生產(chǎn)多種產(chǎn)品對象.
抽象工廠方法概述
負責(zé)對象創(chuàng)建飞蚓,一個工廠可以生產(chǎn)多個對象,提供一個創(chuàng)建一系列相關(guān)或相互依賴的接口廊蜒,無需指定具體接口.
要點
- 產(chǎn)品等級結(jié)構(gòu)趴拧,產(chǎn)品的繼承結(jié)構(gòu).比如汽車,汽車是一個抽象類山叮,.而寶馬著榴,奔馳,蘭博基尼則是具體的汽車品牌.抽象汽車和具體的汽車品牌構(gòu)成了一個產(chǎn)品等級結(jié)構(gòu).抽象汽車是父類屁倔,具體汽車品牌是子類.
- 產(chǎn)品族脑又,同一個工廠生產(chǎn)的不同產(chǎn)品.比如IPhone,IPad,Mac 是蘋果的不同產(chǎn)品,它們是是一個產(chǎn)品族.
- 工廠生產(chǎn)多個不同的具體產(chǎn)品锐借,可以一個產(chǎn)品族的所有對象.
- AbstractFactory 抽象工廠.聲明創(chuàng)建產(chǎn)品族的方法问麸,每一個方法對應(yīng)一種產(chǎn)品.
- ConcreteFactory 具體工廠,實現(xiàn)抽象工廠中創(chuàng)建產(chǎn)品的方法瞎饲,生產(chǎn)具體產(chǎn)品口叙,這些產(chǎn)品構(gòu)成一個產(chǎn)品族.
- AbstractProduct 抽象產(chǎn)品 ,為產(chǎn)品聲明接口嗅战,定義產(chǎn)品所有具有的方法.
- Product 具體產(chǎn)品.工廠生產(chǎn)的具體產(chǎn)品妄田,實現(xiàn)產(chǎn)品中聲明的方法.
實現(xiàn)
- 抽象工廠俺亮,聲明創(chuàng)建產(chǎn)品族的方法,可以是接口疟呐,抽象類以及具體類.
public interface AbstractFactory{
AbstractProductA createProductA();//工廠方法A
AbstractProductB createProductB();//工廠方法B
}
- 具體工廠脚曾,每個具體的工廠方法生產(chǎn)具體的對象,一組具體工廠方法生產(chǎn)一個產(chǎn)品族.
public class Factory1 implements AbstractFactory{
public AbstractProductA createProductA(){
return new ProductA1();
}
public AbstractProductB createProductB(){
return new ProductB1();
}
}
抽象工廠模式的使用場景
- 一個系統(tǒng)中启具,產(chǎn)品類實例的創(chuàng)建本讥,組合和表達等不影響系統(tǒng),用戶不關(guān)心產(chǎn)品的創(chuàng)建過程.
- 系統(tǒng)中有多個產(chǎn)品族鲁冯,但是每次只使用其中某個一個產(chǎn)品族.
- 屬于同一個產(chǎn)品族的產(chǎn)品在一起使用
- 系統(tǒng)提供產(chǎn)品類的庫拷沸,所有的產(chǎn)品有相同的接口,產(chǎn)品等級結(jié)構(gòu)穩(wěn)定薯演,設(shè)計內(nèi)完成后撞芍,不會改變產(chǎn)品等級結(jié)構(gòu).