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

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

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

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

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

抽象工廠模式

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

抽象工廠模式的實(shí)現(xiàn)分為以下幾個(gè)步驟:

  1. 定義抽象產(chǎn)品接口:抽象工廠模式的核心是抽象產(chǎn)品接口,它定義了產(chǎn)品的基本結(jié)構(gòu)和行為。
  2. 定義具體工廠接口:具體工廠接口是實(shí)現(xiàn)抽象產(chǎn)品接口的工廠類,它們負(fù)責(zé)創(chuàng)建具體產(chǎn)品實(shí)例。
  3. 定義工廠:每個(gè)具體工廠都是一個(gè)特定領(lǐng)域的工廠,它實(shí)現(xiàn)了抽象工廠接口,并提供了具體的產(chǎn)品實(shí)現(xiàn)。
  4. 創(chuàng)建產(chǎn)品實(shí)例:使用抽象工廠接口,客戶端可以創(chuàng)建不同的產(chǎn)品實(shí)例,而無(wú)需指定具體的子類。

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

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

  1. 具體產(chǎn)品在應(yīng)用層的代碼隔離,無(wú)需關(guān)系創(chuàng)建的細(xì)節(jié)。
  2. 將一個(gè)系列的產(chǎn)品統(tǒng)一到一起創(chuàng)建,方便產(chǎn)品族的擴(kuò)展。
  3. 提供一個(gè)產(chǎn)品類的庫(kù),所有的產(chǎn)品以同樣的接口出現(xiàn),使得客戶端不依賴于具體實(shí)現(xiàn)。
  4. 通過創(chuàng)建不同的工廠對(duì)象來創(chuàng)建不同的產(chǎn)品實(shí)例,無(wú)需關(guān)心它們實(shí)際實(shí)現(xiàn)的是哪個(gè)具體產(chǎn)品。

缺點(diǎn):

  1. 規(guī)定了所有可能被創(chuàng)建的產(chǎn)品集合,產(chǎn)品族中擴(kuò)展新的產(chǎn)品困難。
  2. 增加了系統(tǒng)的抽象性和理解難度。
  3. 使用場(chǎng)景:客戶端(應(yīng)用層)不依賴與產(chǎn)品類的實(shí)現(xiàn)等細(xì)節(jié)。
  4. 需要大量的重復(fù)代碼,增加了開發(fā)和維護(hù)的成本。

使用場(chǎng)景

  1. 一個(gè)系統(tǒng)要獨(dú)立于它的產(chǎn)品的創(chuàng)建、組合和表示時(shí)。
  2. 一個(gè)系統(tǒng)要由多個(gè)產(chǎn)品系列中的一個(gè)來配置時(shí)。
  3. 需要強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對(duì)象的設(shè)計(jì)以便進(jìn)行聯(lián)合使用時(shí)。
  4. 提供一個(gè)產(chǎn)品類庫(kù),而只想顯示它們的接口而不是實(shí)現(xiàn)時(shí)。
  5. 產(chǎn)品之間相互關(guān)聯(lián)、相互依賴且相互約束的地方。

具體實(shí)現(xiàn)

以下以智能產(chǎn)品汽車和手機(jī)為例,繼承關(guān)系如下:

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

定義抽象工廠

/**
 * 智能產(chǎn)品抽象工廠
 */
public interface SmartProductFactory {

    ISmartPhone createSmartPhone();

    ISmartCar createSmartCar();

}

具體工廠

/**
 * @author physicx
 * @date 2023/5/17 上午11:18
 * @desc 華為工廠
 * Created with IntelliJ IDEA
 */
public class HuaweiFactory implements SmartProductFactory {
    @Override
    public ISmartPhone createSmartPhone() {
        return new HuaweiSmartPhone();
    }

    @Override
    public ISmartCar createSmartCar() {
        return new HuaweiSmartCar();
    }
}
/**
 * @author guogq
 * @date 2023/5/17 上午11:18
 * @desc 小米工廠
 * Created with IntelliJ IDEA
 */
public class XiaomiFactory implements SmartProductFactory {
    @Override
    public ISmartPhone createSmartPhone() {
        return new XiaomiSmartPhone();
    }

    @Override
    public ISmartCar createSmartCar() {
        return new XiaomiSmartCar();
    }
}

定義抽象產(chǎn)品

/**
 * 智能手機(jī)
 */
public interface ISmartPhone {

    void printInfo();

}
/**
 * 智能汽車
 */
public interface ISmartCar {
    void printInfo();
}

具體產(chǎn)品

/**
 * @author physicx
 * @date 2023/5/17 上午11:19
 * @desc 華為智能汽車
 * Created with IntelliJ IDEA
 */
public class HuaweiSmartCar implements ISmartCar {
    @Override
    public void printInfo() {
        System.out.println("華為智能汽車");
    }
}
/**
 * @author guogq
 * @date 2023/5/17 上午11:19
 * @desc 華為智能手機(jī)
 * Created with IntelliJ IDEA
 */
public class HuaweiSmartPhone implements ISmartPhone {
    @Override
    public void printInfo() {
        System.out.println("華為智能手機(jī)");
    }
}
/**
 * @author guogq
 * @date 2023/5/17 上午11:19
 * @desc 小米智能汽車
 * Created with IntelliJ IDEA
 */
public class XiaomiSmartCar implements ISmartCar {
    @Override
    public void printInfo() {
        System.out.println("小米智能汽車");
    }
}
/**
 * @author guogq
 * @date 2023/5/17 上午11:19
 * @desc 小米智能手機(jī)
 * Created with IntelliJ IDEA
 */
public class XiaomiSmartPhone implements ISmartPhone {
    @Override
    public void printInfo() {
        System.out.println("小米智能手機(jī)");
    }
}

客戶端調(diào)用

public static void main(String[] args) {
        HuaweiFactory huaweiFactory = new HuaweiFactory();
        huaweiFactory.createSmartPhone().printInfo();
        huaweiFactory.createSmartCar().printInfo();

        XiaomiFactory xiaomiFactory = new XiaomiFactory();
        xiaomiFactory.createSmartPhone().printInfo();
        xiaomiFactory.createSmartCar().printInfo();
    }

打印如下:

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

工廠方法模式和抽象工廠模式區(qū)別

工廠方法模式和抽象工廠模式都是創(chuàng)建型模式,區(qū)別如下:

  1. 工廠方法模式只有一個(gè)抽象產(chǎn)品類,而抽象工廠模式有多個(gè)。
  2. 工廠方法模式的具體工廠類只能創(chuàng)建一個(gè)具體產(chǎn)品類的實(shí)例,而抽象工廠模式可以創(chuàng)建多個(gè)。
  3. 工廠方法模式的使用很簡(jiǎn)單,只要繼承成子類,并實(shí)現(xiàn)工廠方法的工廠就可以了,而抽象工廠模式需要先實(shí)例化它,然后將它傳入一些針對(duì)抽象類型所寫的代碼中。
  4. 工廠方法模式的優(yōu)點(diǎn)是可以把一群相關(guān)的產(chǎn)品集合起來,而抽象工廠模式的優(yōu)點(diǎn)是可以把一群相關(guān)的產(chǎn)品集合起來,并且創(chuàng)建整個(gè)產(chǎn)品家族的模式。

總之,工廠方法是由子類自行決定實(shí)例化那個(gè)類,而抽象工廠是自己決定實(shí)例化哪個(gè)類。至于是組合還是繼承還是實(shí)現(xiàn)接口都無(wú)所謂。根本區(qū)別在于是自己實(shí)例化還是子類實(shí)例化。

如果產(chǎn)品單一,只有一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu)適合使用工廠方法模式。如果存在多個(gè)產(chǎn)品等級(jí),產(chǎn)品分類多個(gè)可以形成產(chǎn)品族合適使用抽象工廠模式。

補(bǔ)充說明

后續(xù)會(huì)依次更新 詳解java 23種設(shè)計(jì)模式,歡迎關(guān)注、交流、補(bǔ)充相關(guān)內(nèi)容(如下)。文章來源地址http://www.zghlxwxcb.cn/news/detail-447871.html

快捷導(dǎo)航
設(shè)計(jì)模式簡(jiǎn)介總結(jié)
單例模式詳解
工廠方法模式
抽象工廠模式

到了這里,關(guān)于java設(shè)計(jì)模式【抽象工廠模式】的文章就介紹完了。如果您還想了解更多內(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)文章

  • 手寫Java設(shè)計(jì)模式之抽象工廠模式,附源碼解讀

    手寫Java設(shè)計(jì)模式之抽象工廠模式,附源碼解讀

    接上篇,抽象工廠模式將汽車的一些屬性可以抽象出來,可以理解為給不同汽車品牌生成時(shí)加上不同的特性,如顏色等,具體代碼如下: 引入顏色接口: 將顏色與汽車生成品牌抽象出來,增加抽象類: 繼承抽象類,分別對(duì)不同屬性的特征進(jìn)行操作,如涂上顏色等,首先實(shí)現(xiàn)

    2024年04月25日
    瀏覽(23)
  • [設(shè)計(jì)模式Java實(shí)現(xiàn)附plantuml源碼~創(chuàng)建型] 產(chǎn)品族的創(chuàng)建——抽象工廠模式

    [設(shè)計(jì)模式Java實(shí)現(xiàn)附plantuml源碼~創(chuàng)建型] 產(chǎn)品族的創(chuàng)建——抽象工廠模式

    前言: 為什么之前寫過Golang 版的設(shè)計(jì)模式,還在重新寫 Java 版? 答:因?yàn)閷?duì)于我而言,當(dāng)然也希望對(duì)正在學(xué)習(xí)的大伙有幫助。Java作為一門純面向?qū)ο蟮恼Z(yǔ)言,更適合用于學(xué)習(xí)設(shè)計(jì)模式。 為什么類圖要附上uml 因?yàn)楹芏嗳藢W(xué)習(xí)有做筆記的習(xí)慣,如果單純的只是放一張圖片,那

    2024年01月22日
    瀏覽(22)
  • 自學(xué)設(shè)計(jì)模式(簡(jiǎn)單工廠模式、工廠模式、抽象工廠模式)

    使用工廠模式來生產(chǎn)某類對(duì)象(代碼簡(jiǎn)化且容易維護(hù),類之間有血緣關(guān)系,可以通過工廠類進(jìn)行生產(chǎn)); 簡(jiǎn)單工廠模式(用于創(chuàng)建簡(jiǎn)單對(duì)象) 對(duì)于簡(jiǎn)單工廠模式,需要的工廠類只有一個(gè); 在工廠類中的公共成員函數(shù)來創(chuàng)建所需對(duì)象; 工廠模式 簡(jiǎn)單工廠模式會(huì)違反開放封閉

    2024年02月11日
    瀏覽(27)
  • 【設(shè)計(jì)模式】單例模式、工廠方法模式、抽象工廠模式

    1. 單例模式 (Singleton Pattern): 場(chǎng)景: 在一個(gè)應(yīng)用程序中,需要一個(gè)全局唯一的配置管理器,確保配置信息只有一個(gè)實(shí)例。 2. 工廠方法模式 (Factory Method Pattern): 場(chǎng)景: 創(chuàng)建一組具有相似功能但具體實(shí)現(xiàn)不同的日志記錄器。 3. 抽象工廠模式 (Abstract Factory Pattern): 場(chǎng)景: 創(chuàng)建不同

    2024年01月15日
    瀏覽(29)
  • 【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細(xì)節(jié),初窺模板設(shè)計(jì)模式、工廠設(shè)計(jì)模式與代理設(shè)計(jì)模式~

    【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細(xì)節(jié),初窺模板設(shè)計(jì)模式、工廠設(shè)計(jì)模式與代理設(shè)計(jì)模式~

    掌握 抽象類和接口的定義、使用、區(qū)別、常見設(shè)計(jì)模式; 抽象類是代碼開發(fā)中的重要組成部分,利用抽象類可以明確地定義子類需要覆寫的方法,這樣相當(dāng)于在語(yǔ)法程度上對(duì)子類進(jìn)行了嚴(yán)格的定義限制,代碼的開發(fā)也就更加標(biāo)準(zhǔn)。下面具體介紹抽象類的概念。 普通類可以直

    2024年02月16日
    瀏覽(25)
  • 設(shè)計(jì)模式-抽象工廠模式

    抽象工廠模式:該模式是對(duì)工廠模式的拓展,因?yàn)楣S模式中創(chuàng)建的產(chǎn)品都需要繼承自同一個(gè)父類或接口,創(chuàng)建的產(chǎn)品類型相同,無(wú)法創(chuàng)建其他類型產(chǎn)品,所以抽象工廠模式對(duì)其進(jìn)行拓展,使其可以創(chuàng)建其他類型的產(chǎn)品。 手機(jī)產(chǎn)品 Pad產(chǎn)品 工廠 優(yōu)點(diǎn):創(chuàng)建的產(chǎn)品種類不單一

    2024年02月13日
    瀏覽(22)
  • 設(shè)計(jì)模式 - 抽象工廠模式

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

    學(xué)完工廠模式,才發(fā)現(xiàn)還有一個(gè)抽象工廠模式;學(xué)習(xí)后發(fā)現(xiàn)不論是通過接口方式、還是繼承方式,都可以使用抽象工廠模式;但是個(gè)人建議更多的時(shí)候,我們可以優(yōu)先考慮接口方式,畢竟 單繼承,多實(shí)現(xiàn) 設(shè)計(jì)模式分為三種類型,共23種 創(chuàng)建型模式:?jiǎn)卫J?、工廠模式、抽

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

    【設(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ì)象的工廠,不需要顯式指定它們的類。每個(gè)

    2024年02月13日
    瀏覽(28)
  • 設(shè)計(jì)模式(三):抽象工廠模式

    設(shè)計(jì)模式(三):抽象工廠模式

    抽象工廠模式 (Abstract Factory Pattern)屬于創(chuàng)建型模式,是圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠。該超級(jí)工廠又稱為其他工廠的工廠。 在 抽象工廠模式 中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對(duì)象的工廠,不需要顯式指定它們的類。每個(gè)生成的工廠都能按照工廠模式提供對(duì)象。 通過使用 抽

    2024年04月25日
    瀏覽(22)
  • 設(shè)計(jì)模式(3)抽象工廠模式

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

    一、介紹: 1、定義:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)須指定它們具體的類。 2、組成結(jié)構(gòu): (1)抽象工廠角色:擔(dān)任這個(gè)角色的是工廠方法模式的核心,它是與應(yīng)用程序無(wú)關(guān)的。任何在模式中創(chuàng)建對(duì)象的工廠類必須實(shí)現(xiàn)這個(gè)接口。 (2)具體工廠角色

    2024年02月11日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包