java設(shè)計(jì)模式03(抽象工廠模式)

在工廠方法模式中每一個(gè)具體工廠只需生產(chǎn)一種具體產(chǎn)品,但是在抽象工廠模式中一個(gè)具體工廠可以生產(chǎn)一組相關(guān)的具體產(chǎn)品。當(dāng)系統(tǒng)所提供的工廠生產(chǎn)的具體產(chǎn)品并不是一個(gè)簡(jiǎn)單的對(duì)象,而是多個(gè)位于不同產(chǎn)品等級(jí)結(jié)構(gòu),屬于不同類(lèi)型的具體產(chǎn)品時(shí)就可以使用抽象工廠模式。
抽象工廠模式為創(chuàng)建一組對(duì)象提供了一種解決方案。與工廠方法模式相比,抽象工廠模式中的具體工廠不只是創(chuàng)建一種產(chǎn)品,他負(fù)責(zé)創(chuàng)建一族產(chǎn)品。

定義:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴(lài)對(duì)象的接口,而無(wú)須指定它們具體的類(lèi)。

抽象工廠模式結(jié)構(gòu)與實(shí)現(xiàn)
1.AbstractFactory(抽象工廠):聲明了一組用于創(chuàng)建一族產(chǎn)品的方法,每一個(gè)方法對(duì)應(yīng)一種產(chǎn)品。

public interface AbstractFactory {

    public AbstractProductA createProductA();
    
    public AbstractProductB createProductB();
    
    //...
}

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

public class ConcreteFactory implements AbstractFactory {

    @Override
    public AbstractProductA createProductA() {
        return new ConcreteProductA();
    }

    @Override
    public AbstractProductB createProductB() {
        return new ConcreteProductB();
    }

}

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

public interface AbstractProductA {
    
    public void applyProductA();

}
public interface AbstractProductB {

    public void applyProductB();
}

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

public class ConcreteProductA implements AbstractProductA {

    @Override
    public void applyProductA() {
        System.out.println("應(yīng)用productA成功!");
    }

}
public class ConcreteProductB implements AbstractProductB{

    @Override
    public void applyProductB() {
        System.out.println("應(yīng)用productB成功!");
    }

}

5.Test

public class Test {

    public static void main(String[] args) {
        AbstractFactory abstractFactory=new ConcreteFactory();
        AbstractProductA productA=abstractFactory.createProductA();
        productA.applyProductA();
        AbstractProductB productB=abstractFactory.createProductB();
        productB.applyProductB();
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 工廠方法模式通過(guò)引入工廠等級(jí)結(jié)構(gòu),解決了簡(jiǎn)單工廠模式中工廠類(lèi)職責(zé)太重的問(wèn)題,但由于工廠方法模式中的每個(gè)工廠只生產(chǎn)一...
    justCode_閱讀 1,296評(píng)論 1 6
  • 設(shè)計(jì)原則: 要依賴(lài)抽象,不要依賴(lài)具體類(lèi) 目錄 本文的結(jié)構(gòu)如下: 什么是抽象工廠模式 為什么要用該模式 模式的結(jié)構(gòu) ...
    w1992wishes閱讀 1,237評(píng)論 0 6
  • 工廠模式是我們最常用的實(shí)例化對(duì)象模式了,是用工廠方法代替new操作的一種模式。通常我們所說(shuō)的工廠模式是指工廠方法模...
    zfylin閱讀 1,403評(píng)論 0 7
  • 【學(xué)習(xí)難度:★★★★☆,使用頻率:★★★★★】直接出處:抽象工廠模式梳理和學(xué)習(xí):https://github.co...
    BruceOuyang閱讀 668評(píng)論 0 1
  • 抽象工廠模式 介紹 工廠方法模式通過(guò)引入工廠等級(jí)結(jié)構(gòu),解決了簡(jiǎn)單工廠模式中工廠類(lèi)職責(zé)太重的問(wèn)題,但由于工廠方法模式...
    666真666閱讀 1,319評(píng)論 0 7

友情鏈接更多精彩內(nèi)容