鍍金池/ 教程/ Java/ 工廠三兄弟之抽象工廠模式(三)
工廠三兄弟之抽象工廠模式(五)
復(fù)雜對象的組裝與創(chuàng)建——建造者模式(一)
工廠三兄弟之工廠方法模式(一)
復(fù)雜對象的組裝與創(chuàng)建——建造者模式(二)
確保對象的唯一性——單例模式 (二)
工廠三兄弟之簡單工廠模式(四)
確保對象的唯一性——單例模式 (一)
工廠三兄弟之工廠方法模式(四)
對象的克隆——原型模式(一)
工廠三兄弟之抽象工廠模式(二)
工廠三兄弟之工廠方法模式(三)
工廠三兄弟之抽象工廠模式(一)
工廠三兄弟之抽象工廠模式(四)
確保對象的唯一性——單例模式 (三)
工廠三兄弟之簡單工廠模式(三)
對象的克隆——原型模式(二)
復(fù)雜對象的組裝與創(chuàng)建——建造者模式(三)
對象的克隆——原型模式(四)
確保對象的唯一性——單例模式(四)
工廠三兄弟之簡單工廠模式(一)
工廠三兄弟之簡單工廠模式(二)
對象的克隆——原型模式(三)
工廠三兄弟之抽象工廠模式(三)
確保對象的唯一性——單例模式(五)
工廠三兄弟之工廠方法模式(二)

工廠三兄弟之抽象工廠模式(三)

抽象工廠模式概述

抽象工廠模式為創(chuàng)建一組對象提供了一種解決方案。與工廠方法模式相比,抽象工廠模式中的具體工廠不只是創(chuàng)建一種產(chǎn)品,它負(fù)責(zé)創(chuàng)建一族產(chǎn)品。抽象工廠模式定義如下:

抽象工廠模式(Abstract Factory Pattern):提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無須指定它們具體的類。抽象工廠模式又稱為 Kit 模式,它是一種對象創(chuàng)建型模式。

在抽象工廠模式中,每一個具體工廠都提供了多個工廠方法用于產(chǎn)生多種不同類型的產(chǎn)品,這些產(chǎn)品構(gòu)成了一個產(chǎn)品族,抽象工廠模式結(jié)構(gòu)如圖所示:

http://wiki.jikexueyuan.com/project/design-pattern-creation/images/20130713163800203.jpg" alt="抽象工廠模式結(jié)構(gòu)圖" />

在抽象工廠模式結(jié)構(gòu)圖中包含如下幾個角色:

  • AbstractFactory(抽象工廠):它聲明了一組用于創(chuàng)建一族產(chǎn)品的方法,每一個方法對應(yīng)一種產(chǎn)品。

  • ConcreteFactory(具體工廠):它實現(xiàn)了在抽象工廠中聲明的創(chuàng)建產(chǎn)品的方法,生成一組具體產(chǎn)品,這些產(chǎn)品構(gòu)成了一個產(chǎn)品族,每一個產(chǎn)品都位于某個產(chǎn)品等級結(jié)構(gòu)中。

  • AbstractProduct(抽象產(chǎn)品):它為每種產(chǎn)品聲明接口,在抽象產(chǎn)品中聲明了產(chǎn)品所具有的業(yè)務(wù)方法。

  • ConcreteProduct(具體產(chǎn)品):它定義具體工廠生產(chǎn)的具體產(chǎn)品對象,實現(xiàn)抽象產(chǎn)品接口中聲明的業(yè)務(wù)方法。

在抽象工廠中聲明了多個工廠方法,用于創(chuàng)建不同類型的產(chǎn)品,抽象工廠可以是接口,也可以是抽象類或者具體類,其典型代碼如下所示:

abstract class AbstractFactory {  
public abstract AbstractProductA createProductA(); //工廠方法一  
public abstract AbstractProductB createProductB(); //工廠方法二  
……  
}  

具體工廠實現(xiàn)了抽象工廠,每一個具體的工廠方法可以返回一個特定的產(chǎn)品對象,而同一個具體工廠所創(chuàng)建的產(chǎn)品對象構(gòu)成了一個產(chǎn)品族。對于每一個具體工廠類,其典型代碼如下所示:

class ConcreteFactory1 extends AbstractFactory {
    //工廠方法一
public AbstractProductA createProductA() {
    return new ConcreteProductA1();
}

//工廠方法二
public AbstractProductB createProductB() {
    return new ConcreteProductB1();
}

……
}

與工廠方法模式一樣,抽象工廠模式也可為每一種產(chǎn)品提供一組重載的工廠方法,以不同的方式對產(chǎn)品對象進(jìn)行創(chuàng)建。

思考

抽象工廠模式是否符合“開閉原則”?【從增加新的產(chǎn)品等級結(jié)構(gòu)和增加新的產(chǎn)品族兩方面進(jìn)行思考?!?/p>