溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用Java代碼實(shí)現(xiàn)抽象工廠模式

發(fā)布時(shí)間:2022-04-07 10:02:40 來源:億速云 閱讀:140 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“怎么用Java代碼實(shí)現(xiàn)抽象工廠模式”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“怎么用Java代碼實(shí)現(xiàn)抽象工廠模式”文章能幫助大家解決問題。

解決工廠方法模式的問題:一個(gè)具體工廠只能創(chuàng)建一類產(chǎn)品,而實(shí)際過程中一個(gè)工廠往往需要生成很多的產(chǎn)品,這種可以采用抽象工廠模式。

1. 抽象工廠模式解決

定義:提供一個(gè)創(chuàng)建一系列相關(guān)或者互相依賴對(duì)象的接口,無需指定他們的具體的類,具體的工廠負(fù)責(zé)實(shí)現(xiàn)具體的產(chǎn)品的實(shí)例。使一個(gè)工廠可以產(chǎn)生多個(gè)產(chǎn)品。

2. 抽象工廠類圖UML

怎么用Java代碼實(shí)現(xiàn)抽象工廠模式

3. 抽象工廠模式的主要角色

抽象工廠(AbstractFactory):提供了創(chuàng)建產(chǎn)品的接口,包含了多個(gè)創(chuàng)建產(chǎn)品的接口方法,可以創(chuàng)建多個(gè)不同等級(jí)的產(chǎn)品

具體工廠(ConcreteFactory):實(shí)現(xiàn)了抽象工廠定義的方法,完成具體產(chǎn)品的創(chuàng)建

抽象產(chǎn)品(Product):定義了產(chǎn)品的規(guī)范,描述產(chǎn)品的主要特征和性能

具體產(chǎn)品(ConcreteProduct):實(shí)現(xiàn)了抽象產(chǎn)品的定義的方法,有具體工廠來創(chuàng)建產(chǎn)品,具體工廠和具體產(chǎn)品一對(duì)多關(guān)系

4. 代碼實(shí)現(xiàn)

抽象工廠方法實(shí)現(xiàn):

public interface AbstractFactory {
    public Product1 createProduct1();
    public Product2 createProduct2();
}

public class ConcreteFactory1 implements AbstractFactory {
    @Override
    public Product1 createProduct1() {
        System.out.println("具體工廠1產(chǎn)生具體產(chǎn)品1...");
        return new ConcreteProduct1();
    }

    @Override
    public Product2 createProduct2() {
        System.out.println("具體工廠1產(chǎn)生具體產(chǎn)品2...");
        return new ConcreteProduct2();
    }
}

使用步驟:

  • 創(chuàng)建抽象產(chǎn)品類,定義產(chǎn)品的公共方法

  • 創(chuàng)建具體產(chǎn)品類(實(shí)現(xiàn)抽象產(chǎn)品接口),定義生成的具體產(chǎn)品

  • 創(chuàng)建抽象工廠類,定義具體工廠的公共接口,一個(gè)工廠類可以創(chuàng)建不同等級(jí)的產(chǎn)品

  • 創(chuàng)建具體工廠類,定義創(chuàng)建對(duì)應(yīng)具體產(chǎn)品實(shí)例的方法

  • 調(diào)用方調(diào)用具體的工廠類的方法,從而創(chuàng)建不同具體產(chǎn)品的實(shí)例

5. 抽象工廠方法再探究

解決問題:每個(gè)工廠只能創(chuàng)建一類產(chǎn)品,即是工廠方法的缺點(diǎn)

6. 優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 可以在工廠類內(nèi)部對(duì)產(chǎn)品中相關(guān)聯(lián)的多級(jí)產(chǎn)品共同管理,而不必專門引入新的類來管理

  • 抽象工廠增加了程序的可擴(kuò)展性,當(dāng)新增一個(gè)新的產(chǎn)品族時(shí),不需要修改源代碼,滿足開閉原則

缺點(diǎn):

  • 當(dāng)產(chǎn)品族新增一個(gè)產(chǎn)品類型時(shí),所有的工廠類都需要進(jìn)行修改,增加了系統(tǒng)的抽象性和理解難度

7. 適用示例

王者榮耀中提供了很多的英雄,英雄分為射手、輔助、打野、坦克等職業(yè),不同的職業(yè)對(duì)應(yīng)的技能,屬性不同。聲明坦克、法師、刺客等多個(gè)工廠子類,每個(gè)工廠可以生產(chǎn)相應(yīng)技能的應(yīng)用。

關(guān)于“怎么用Java代碼實(shí)現(xiàn)抽象工廠模式”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI