国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java 設(shè)計(jì)模式】創(chuàng)建型之抽象工廠模式

這篇具有很好參考價(jià)值的文章主要介紹了【Java 設(shè)計(jì)模式】創(chuàng)建型之抽象工廠模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在軟件開發(fā)中,抽象工廠模式是一種常見的創(chuàng)建型設(shè)計(jì)模式,它提供了一種創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定它們具體的類。抽象工廠模式的核心思想是將一組相關(guān)的產(chǎn)品組合成一個(gè)工廠,客戶端通過工廠接口創(chuàng)建一系列產(chǎn)品。在本文中,我們將介紹 Java 設(shè)計(jì)模式中的抽象工廠模式,了解其定義、使用場(chǎng)景以及如何在實(shí)際開發(fā)中應(yīng)用。

1. 定義

抽象工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一個(gè)接口,用于創(chuàng)建一系列相關(guān)或相互依賴的對(duì)象,而無需指定它們具體的類。抽象工廠模式將一組相關(guān)的產(chǎn)品組合成一個(gè)工廠,客戶端通過工廠接口創(chuàng)建一系列產(chǎn)品。這有助于實(shí)現(xiàn)產(chǎn)品族的概念,其中產(chǎn)品族是指一組相關(guān)的產(chǎn)品,例如不同品牌的汽車。

2. 應(yīng)用場(chǎng)景

抽象工廠模式的應(yīng)用場(chǎng)景包括但不限于以下情況:

  • 一系列相關(guān)產(chǎn)品:

    當(dāng)有一系列相關(guān)或相互依賴的產(chǎn)品需要?jiǎng)?chuàng)建時(shí),此時(shí)就可以使用抽象工廠模式,這有助于確保產(chǎn)品之間的兼容性和一致性

  • 系統(tǒng)擴(kuò)展性:

    當(dāng)系統(tǒng)需要支持新的產(chǎn)品族時(shí),只需新增對(duì)應(yīng)的具體工廠類和產(chǎn)品類,而無需修改已有代碼

  • 隱藏具體實(shí)現(xiàn):

    客戶端只需關(guān)心抽象工廠和抽象產(chǎn)品的接口,不需要知道具體實(shí)現(xiàn)類,降低了客戶端與具體類之間的耦合

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

抽象工廠模式的實(shí)現(xiàn)主要涉及以下幾個(gè)角色:

【Java 設(shè)計(jì)模式】創(chuàng)建型之抽象工廠模式,設(shè)計(jì)模式,java,設(shè)計(jì)模式,抽象工廠模式

  • 抽象產(chǎn)品接口(AbstractProduct): 定義了產(chǎn)品的抽象方法
  • 具體產(chǎn)品實(shí)現(xiàn)類(ConcreteProduct): 實(shí)現(xiàn)了抽象產(chǎn)品接口,是抽象工廠創(chuàng)建的具體對(duì)象
  • 抽象工廠接口(AbstractFactory): 定義了創(chuàng)建產(chǎn)品的抽象方法,可以包含多個(gè)不同的抽象產(chǎn)品接口
  • 具體工廠實(shí)現(xiàn)類(ConcreteFactory): 實(shí)現(xiàn)了抽象工廠接口,負(fù)責(zé)創(chuàng)建具體產(chǎn)品的對(duì)象

下面是一個(gè)簡(jiǎn)單的抽象工廠模式的實(shí)現(xiàn)示例:

1)創(chuàng)建一個(gè)產(chǎn)品接口 AbstractProductA 及它的兩個(gè)實(shí)現(xiàn)類 ConcreteProductA1 和 ConcreteProductA2

AbstractProductA.java

package com.cheney.demo;

interface AbstractProductA {
    void operationA();
}

ConcreteProductA1.java

package com.cheney.demo;

class ConcreteProductA1 implements AbstractProductA {
    @Override
    public void operationA() {
        System.out.println("產(chǎn)品 A1");
    }
}

ConcreteProductA2.java

package com.cheney.demo;

class ConcreteProductA2 implements AbstractProductA {
    @Override
    public void operationA() {
        System.out.println("產(chǎn)品 A2");
    }
}

2)創(chuàng)建一個(gè)產(chǎn)品接口 AbstractProductB 及它的兩個(gè)實(shí)現(xiàn)類 ConcreteProductB1 和 ConcreteProductB2

AbstractProductB.java

package com.cheney.demo;

interface AbstractProductB {
    void operationB();
}

ConcreteProductB1.java

package com.cheney.demo;

class ConcreteProductB1 implements AbstractProductB {
    @Override
    public void operationB() {
        System.out.println("產(chǎn)品 B1");
    }
}

ConcreteProductB2.java

package com.cheney.demo;

class ConcreteProductB2 implements AbstractProductB {
    @Override
    public void operationB() {
        System.out.println("產(chǎn)品 B2");
    }
}

3)創(chuàng)建一個(gè)產(chǎn)品接口 AbstractFactory 及它的兩個(gè)實(shí)現(xiàn)類 ConcreteFactory1 和 ConcreteFactory2

AbstractProductB.java

interface AbstractFactory {
    AbstractProductA createProductA();
    AbstractProductB createProductB();
}

ConcreteFactory1.java

package com.cheney.demo;

class ConcreteFactory1 implements AbstractFactory {
    @Override
    public AbstractProductA createProductA() {
        return new ConcreteProductA1();
    }

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

ConcreteFactory2.java

package com.cheney.demo;

class ConcreteFactory2 implements AbstractFactory {
    @Override
    public AbstractProductA createProductA() {
        return new ConcreteProductA2();
    }

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

在上述示例中,AbstractProductAAbstractProductB 是抽象產(chǎn)品接口,定義了產(chǎn)品的抽象方法。ConcreteProductA1、ConcreteProductA2、ConcreteProductB1ConcreteProductB2 是具體產(chǎn)品的實(shí)現(xiàn)類。

AbstractFactory 是抽象工廠接口,定義了創(chuàng)建產(chǎn)品的抽象方法。ConcreteFactory1ConcreteFactory2 是具體工廠的實(shí)現(xiàn)類,分別負(fù)責(zé)創(chuàng)建 ConcreteProductA1、ConcreteProductA2ConcreteProductB1ConcreteProductB2

4. 應(yīng)用示例

假設(shè)我們要吃可樂喝漢堡,需要支持不同店的美食。我們可以使用抽象工廠模式來管理不同店下的美食。

1)創(chuàng)建一個(gè)可樂接口 及它的兩個(gè)實(shí)現(xiàn)類

Cola.java

package com.cheney.demo;

interface Cola {
    void makeCola();
}

KfcCola.java

package com.cheney.demo;

class KfcCola implements Cola {
    @Override
    public void makeCola() {
        System.out.println("肯德基的可樂");
    }
}

McDonaldSCola.java

package com.cheney.demo;

class McDonaldSCola implements Cola {
    @Override
    public void makeCola() {
        System.out.println("麥當(dāng)勞的可樂");
    }
}

2)創(chuàng)建一個(gè)漢堡包接口 及它的兩個(gè)實(shí)現(xiàn)類

Hamburger.java

package com.cheney.demo;

interface Hamburger {
    void makeHamburger();
}

KfcHamburger.java

package com.cheney.demo;

class KfcHamburger implements Hamburger {
    @Override
    public void makeHamburger() {
        System.out.println("肯德基的漢堡包");
    }
}

McDonaldSHamburger.java

package com.cheney.demo;

class McDonaldSHamburger implements Hamburger {
    @Override
    public void makeHamburger() {
        System.out.println("麥當(dāng)勞的漢堡包");
    }
}

3)創(chuàng)建一個(gè)美食工廠接口 及 它的兩個(gè)實(shí)現(xiàn)類

FoodFactory.java

package com.cheney.demo;

interface FoodFactory {
    Cola createCola();
    Hamburger createHamburger();
}

KfcFoodFactory.java

package com.cheney.demo;

class KfcFoodFactory implements FoodFactory {
    @Override
    public Cola createCola() {
        return new KfcCola();
    }

    @Override
    public Hamburger createHamburger() {
        return new KfcHamburger();
    }
}

McDonaldSFoodFactory.java

package com.cheney.demo;

class McDonaldSFoodFactory implements FoodFactory {
    @Override
    public Cola createCola() {
        return new McDonaldSCola();
    }

    @Override
    public Hamburger createHamburger() {
        return new McDonaldSHamburger();
    }
}

在上述示例中,ColaHamburger 是抽象產(chǎn)品接口,定義了產(chǎn)品的抽象方法。KfcCola、KfcHamburger、McDonaldSColaMcDonaldSHamburger 是具體產(chǎn)品的實(shí)現(xiàn)類。

FoodFactory 是抽象工廠接口,定義了創(chuàng)建產(chǎn)品的抽象方法。KfcFoodFactoryMcDonaldSFoodFactory 是具體工廠的實(shí)現(xiàn)類,分別負(fù)責(zé)創(chuàng)建KfcColaKfcHamburger、McDonaldSColaMcDonaldSHamburger

在使用中,我們可以根據(jù)需要選擇不同的工廠來創(chuàng)建不同店里的美食

package com.cheney.demo;

public class Main {
    public static void main(String[] args) {
        // 創(chuàng)建 麥當(dāng)勞系列 美食
        FoodFactory mcDonaldSFoodFactory = new McDonaldSFoodFactory();
        Cola mcDonaldSCola = mcDonaldSFoodFactory.createCola();
        Hamburger mcDonaldSHamburger = mcDonaldSFoodFactory.createHamburger();
        mcDonaldSCola.makeCola();
        mcDonaldSHamburger.makeHamburger();

        // 創(chuàng)建 肯德基系列 美食
        FoodFactory kfcFoodFactory = new KfcFoodFactory();
        Cola kfcCola = kfcFoodFactory.createCola();
        Hamburger kfcHamburger = kfcFoodFactory.createHamburger();
        kfcCola.makeCola();
        kfcHamburger.makeHamburger();
    }
}

執(zhí)行結(jié)果

【Java 設(shè)計(jì)模式】創(chuàng)建型之抽象工廠模式,設(shè)計(jì)模式,java,設(shè)計(jì)模式,抽象工廠模式

結(jié)語

抽象工廠模式是一種常見且實(shí)用的設(shè)計(jì)模式,它通過定義一個(gè)工廠接口,將一系列相關(guān)或相互依賴的對(duì)象的創(chuàng)建延遲到具體工廠的實(shí)現(xiàn)類中,從而實(shí)現(xiàn)了客戶端和具體類的解耦。在實(shí)際開發(fā)中,抽象工廠模式常用于創(chuàng)建一系列相關(guān)的產(chǎn)品,如美食店中的可樂、漢堡包等。通過合理使用抽象工廠模式,可以使系統(tǒng)更容易擴(kuò)展和維護(hù)。


【Java 設(shè)計(jì)模式】系列 《23 種設(shè)計(jì)模式》 與 《7 大設(shè)計(jì)原則》 總綱
??設(shè)計(jì)原則
?單一職責(zé)原則(SRP) 規(guī)定一個(gè)類應(yīng)該只有一個(gè)引起變化的原因
?開放/封閉原則(OCP) 表明軟件實(shí)體應(yīng)該是可以擴(kuò)展的,但是不可修改的
?里氏替換原則(LSP) 強(qiáng)調(diào)派生類必須能夠替代其基類而不引起程序錯(cuò)誤
?依賴倒置原則(DIP) 倡導(dǎo)高層模塊不應(yīng)該依賴于低層模塊,二者都應(yīng)該依賴于抽象
?接口隔離原則(ISP) 提倡一個(gè)類不應(yīng)該被強(qiáng)迫依賴它不使用的接口
?合成/聚合復(fù)用原則(CARP) 建議盡量使用合成/聚合,盡量不要使用繼承
?迪米特法則(LoD) 規(guī)定一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解

??創(chuàng)建型設(shè)計(jì)模式
?單例模式 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局點(diǎn)
?工廠方法模式 定義一個(gè)用于創(chuàng)建對(duì)象的接口,但是由子類決定實(shí)例化哪一個(gè)類
?抽象工廠模式 提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定它們具體的類
?建造者模式 將一個(gè)復(fù)雜對(duì)象的構(gòu)建與其表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
?原型模式 通過復(fù)制現(xiàn)有的對(duì)象來創(chuàng)建新對(duì)象,而不是從頭開始創(chuàng)建

??結(jié)構(gòu)型設(shè)計(jì)模式
?適配器模式 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口
?橋接模式 將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化
?組合模式 將對(duì)象以樹形結(jié)構(gòu)組合以表示“部分-整體”的層次結(jié)構(gòu)
?裝飾器模式 動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)
?外觀模式 為子系統(tǒng)中的一組接口提供一個(gè)一致的界面
?代理模式 為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問
?享元模式 用共享的方式高效地支持大量小粒度對(duì)象

??行為型設(shè)計(jì)模式
?觀察者模式 定義對(duì)象間的一對(duì)多依賴,當(dāng)一個(gè)對(duì)象改變狀態(tài),所有依賴者都會(huì)受到通知并自動(dòng)更新
?策略模式 定義一系列算法,將它們封裝起來,并且使它們可以相互替換
?命令模式 將請(qǐng)求封裝成對(duì)象,使得可以用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化
?狀態(tài)模式 允許對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為
?責(zé)任鏈模式 為解除請(qǐng)求的發(fā)送者和接收者之間的耦合,而使多個(gè)對(duì)象都有機(jī)會(huì)處理這個(gè)請(qǐng)求
?訪問者模式 將算法與對(duì)象結(jié)構(gòu)分離,并且可以在不改變對(duì)象結(jié)構(gòu)的前提下定義新的操作
?中介者模式 用一個(gè)中介對(duì)象來封裝一系列的對(duì)象交互
?備忘錄模式 在不破壞封裝的情況下,捕獲對(duì)象的內(nèi)部狀態(tài),并在對(duì)象之外保存這個(gè)狀態(tài)
?迭代器模式 提供一種方法順序訪問一個(gè)聚合對(duì)象中的各個(gè)元素,而不暴露其內(nèi)部表示
?模版方法模式 定義一個(gè)操作中的算法的骨架,將一些步驟延遲到子類中
?解釋器模式 定義一個(gè)語言的文法,并且建立一個(gè)解釋器來解釋該語言中的句子

文章來源地址http://www.zghlxwxcb.cn/news/detail-797439.html

到了這里,關(guān)于【Java 設(shè)計(jì)模式】創(chuàng)建型之抽象工廠模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【設(shè)計(jì)模式】創(chuàng)建型-抽象工廠模式

    【設(shè)計(jì)模式】創(chuàng)建型-抽象工廠模式

    在工廠方法模式中,每一個(gè)具體的工廠子類只能生成一種具體的產(chǎn)品,如果想要生產(chǎn)另外一種產(chǎn)品,就需要重新定義一個(gè)抽象工廠類,這樣的拓展性還是會(huì)有點(diǎn)不足,而抽象工廠模式則是可以一個(gè)具體工廠可以生產(chǎn)不同的產(chǎn)品。 在學(xué)習(xí)抽象工廠模式之前先了解一下 產(chǎn)品族和

    2023年04月09日
    瀏覽(47)
  • [設(shè)計(jì)模式]創(chuàng)建型模式-抽象工廠模式

    抽象工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定它們具體的類。抽象工廠模式將一組具有共同主題的單個(gè)工廠封裝起來,它提供接口用于創(chuàng)建相關(guān)或依賴對(duì)象的家族,而不需要指定具體的類。 抽象工廠模式包含以下幾個(gè)

    2024年03月08日
    瀏覽(18)
  • 設(shè)計(jì)模式-創(chuàng)建型模式-抽象工廠模式

    設(shè)計(jì)模式-創(chuàng)建型模式-抽象工廠模式

    抽象工廠模式(Abstract Factory Pattern):提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,它是一種對(duì)象創(chuàng)建型模式。 由于工廠方法模式中的每個(gè)工廠只生產(chǎn)一類產(chǎn)品,可能會(huì)導(dǎo)致系統(tǒng)中存在大量的工廠類,勢(shì)必會(huì)增加系

    2024年02月22日
    瀏覽(28)
  • 創(chuàng)建型設(shè)計(jì)模式05-抽象工廠模式

    創(chuàng)建型設(shè)計(jì)模式05-抽象工廠模式

    ?作者:貓十二懿 ?????賬號(hào):CSDN 、掘金 、個(gè)人博客 、Github ??公眾號(hào):貓十二懿 抽象工廠模式(Abstract Factory Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠,也稱作為工廠的工廠(大工廠里的小工廠)。在抽象工廠模式中, 接口負(fù)責(zé)創(chuàng)建一組相關(guān)對(duì)

    2024年02月07日
    瀏覽(22)
  • 設(shè)計(jì)模式-創(chuàng)建型模式之抽象工廠模式(Abstract Factory)

    設(shè)計(jì)模式-創(chuàng)建型模式之抽象工廠模式(Abstract Factory)

    在工廠方法模式中具體工廠負(fù)責(zé)生產(chǎn)具體的產(chǎn)品,每一個(gè)具體工廠對(duì)應(yīng)一種具體產(chǎn)品,工廠方法也具有唯一性,一般情況下,一個(gè)具體工廠中只有一個(gè)工廠方法或者一組重載的工廠方法。但是有時(shí)候我們需要 一個(gè)工廠可以提供多個(gè)產(chǎn)品對(duì)象 ,而不是單一的產(chǎn)品對(duì)象。 為了更

    2023年04月20日
    瀏覽(30)
  • Java設(shè)計(jì)模式-抽象工廠模式

    設(shè)計(jì)模式是軟件設(shè)計(jì)中的一種常見方法,通過定義一系列通用的解決方案,來解決常見的軟件設(shè)計(jì)問題。其中,抽象工廠模式是一種非常常見的設(shè)計(jì)模式,它可以幫助我們創(chuàng)建一組相關(guān)的對(duì)象,而不需要指定具體的實(shí)現(xiàn)方式。 抽象工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一

    2024年02月01日
    瀏覽(24)
  • java設(shè)計(jì)模式【抽象工廠模式】

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

    抽象工廠模式 是對(duì)簡(jiǎn)單工廠模式的一個(gè)變種,它允許通過一個(gè)統(tǒng)一的接口來創(chuàng)建不同的產(chǎn)品實(shí)例,而無需指定具體的子類。在這個(gè)模式中,我們只關(guān)心產(chǎn)品的抽象接口,而將具體的產(chǎn)品實(shí)現(xiàn)留給子類去實(shí)現(xiàn)。這樣,我們可以通過創(chuàng)建不同的工廠對(duì)象來創(chuàng)建不同的產(chǎn)品實(shí)例,而

    2024年02月05日
    瀏覽(31)
  • 《golang設(shè)計(jì)模式》第一部分·創(chuàng)建型模式-04-抽象工廠模式(Abstract Factory)

    《golang設(shè)計(jì)模式》第一部分·創(chuàng)建型模式-04-抽象工廠模式(Abstract Factory)

    在不具體指定產(chǎn)品類的情況下,為相互關(guān)聯(lián)的產(chǎn)品簇或產(chǎn)品集提供創(chuàng)建接口,并向客戶隱藏具體產(chǎn)品創(chuàng)建的細(xì)節(jié)或表示的對(duì)象。 AbstractFactory(抽象工廠):它聲明了一組用于創(chuàng)建產(chǎn)品的方法,每一個(gè)方法對(duì)應(yīng)一種產(chǎn)品。 ConcreteFactory(具體工廠):它實(shí)現(xiàn)了在抽象工廠中聲明

    2024年02月14日
    瀏覽(26)
  • Java特性之設(shè)計(jì)模式【抽象工廠模式】

    Java特性之設(shè)計(jì)模式【抽象工廠模式】

    概述 抽象工廠模式(Abstract Factory Pattern)是圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠。該超級(jí)工廠又稱為其他工廠的工廠。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式 在抽象工廠模式中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對(duì)象的工廠,不需要顯式指定它們的類。

    2024年02月10日
    瀏覽(21)
  • 【Java 設(shè)計(jì)模式】創(chuàng)建型之單例模式

    【Java 設(shè)計(jì)模式】創(chuàng)建型之單例模式

    在軟件開發(fā)中,單例模式是一種常見的設(shè)計(jì)模式, 它確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn) 。單例模式在需要控制某些資源,如數(shù)據(jù)庫連接池、線程池等共享資源的情況下非常有用。在本文中,我們將介紹 Java 設(shè)計(jì)模式中的單例模式,了解其實(shí)現(xiàn)方式、使用場(chǎng)景

    2024年01月18日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包