中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中什么是抽象工廠

發布時間:2022-03-28 09:20:52 來源:億速云 閱讀:379 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Java中什么是抽象工廠,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

抽象工廠模式

1、什么是抽象工廠

在現實生活中許多工廠是綜合型的工廠,能生產多種類)的產品,就拿案例里面的可樂來說,在節日的時候可能會有圣誕版的可樂,也可能有新年版的可樂(如果不存在就假設),這篇文章要介紹的抽象工廠模式將考慮多等級產品的生產,將同一個具體工廠所生產的位于不同等級的一組產品稱為一個產品族。

比如:

Java中什么是抽象工廠

抽象工廠模式的定義:

是一種為訪問類提供一個創建一組相關或相互依賴對象的接口,且訪問類無須指定所要產品的具體類就能得到同族的不同等級的產品的模式結構。

抽象工廠模式是工廠方法模式的升級版本,工廠方法模式只生產一個等級的產品,而抽象工廠模式可生產多個等級的產品。

2、抽象工廠模式的優缺點

使用抽象工廠模式一般要滿足以下條件:

  • 系統中有多個產品族,每個具體工廠創建同一族但屬于不同等級結構的產品

  • 系統一次只可能消費其中某一族產品,即同族的產品一起使用

優點:

  • 可以在類的內部對產品族中相關聯的多等級產品共同管理,而不必專門引入多個新的類來進行管理

  • 當需要產品族時,抽象工廠可以保證客戶端始終只使用同一個產品的產品組

  • 抽象工廠增強了程序的可擴展性,當增加一個新的產品族時,不需要修改原代碼,滿足開閉原則

缺點:

當產品族中需要增加一個新的產品時,所有的工廠類都需要進行修改。增加了系統的抽象性和理解難度

3、抽象工廠模式的結構與實現

抽象工廠模式同工廠方法模式一樣,也是由抽象工廠、具體工廠、抽象產品和具體產品等 4 個要素構成,但抽象工廠中方法個數不同,抽象產品的個數也不同。現在我們來分析其基本結構和實現方法

模式的結構:

  • 抽象工廠:提供了創建產品的接口,它包含多個創建產品的方法 newProduct(),可以創建多個不同等級的產品

  • 具體工廠:主要是實現抽象工廠中的多個抽象方法,完成具體產品的創建

  • 抽象產品:定義了產品的規范,描述了產品的主要特性和功能,抽象工廠模式有多個抽象產品

  • 具體產品:實現了抽象產品角色所定義的接口,由具體工廠來創建,它同具體工廠之間是多對一的關系

Java中什么是抽象工廠

4、抽象工廠方法模式代碼實現

這里還是以上面兩篇文章的可樂工廠進行擴展,將按照以下的結構圖來設計和實現:

抽象可樂工廠結構圖(自繪):

Java中什么是抽象工廠

可口可樂接口:

public interface CocaCola {
    public void CocaCola();
}

百事可樂接口:

public interface PepsiCola {
    public void PepsiCola();
}

圣誕版可口可樂:

/**
 * 生產圣誕版可口可樂的方法
 */
public class ChristmasCocaCola implements CocaCola{

    @Override
    public void CocaCola() {
        System.out.println("生產了圣誕版的可口可樂");
    }
}

新年版可口可樂:

/**
 * 生產新年版的可口可樂
 */
public class NewYearCocaCola implements CocaCola{
    @Override
    public void CocaCola() {
        System.out.println("生產了新年版的可口可樂");
    }
}

圣誕版百事可樂:

/**
 * 生產圣誕版百事可樂方法
 */
public class ChristmasPepsiCola implements PepsiCola{

    @Override
    public void PepsiCola() {
        System.out.println("生產了圣誕版的百事可樂");
    }
}

新年版百事可樂:

/**
 * 生產新年版百事可樂的方法
 */
public class NewYearPepsiCola implements PepsiCola{

    @Override
    public void PepsiCola() {
        System.out.println("生產了新年版的百事可樂");
    }
}

可樂工廠(抽象工廠):

/**
 * 可樂工廠(抽象工廠)
 * 可以生產兩種版本的可樂
 */

public interface ColaFactory {

    //生產可口可樂:兩個版本
    public CocaCola getCocaCola();

    //生產百事可樂:兩個版本
    public PepsiCola getPepsi();
}

圣誕版系列可樂工廠:

/**
 * 圣誕系列加工廠
 * 生產 圣誕的百事可樂和可口可樂
 */

public class ChristmasFactory implements ColaFactory{


    @Override
    public CocaCola getCocaCola() {
        return new ChristmasCocaCola();
    }

    @Override
    public PepsiCola getPepsi() {
        return new ChristmasPepsiCola();
    }
}

新年版系列可樂工廠:

/**
 * 新年版的加工廠
 * 可以生產新年版的可口可樂和百事可樂
 */
public class NewYearFactory implements ColaFactory{
    @Override
    public CocaCola getCocaCola() {
        return new NewYearCocaCola();
    }

    @Override
    public PepsiCola getPepsi() {
        return new NewYearPepsiCola();
    }
}

客戶端(測試類):

public class Test {
    public static void main(String[] args) {

        //生產圣誕版可口可樂:
        ColaFactory factory =  new ChristmasFactory();
        CocaCola cola = factory.getCocaCola();
        cola.CocaCola();

        //生產圣誕版百事可樂:
        ColaFactory factory1 = new ChristmasFactory();
        PepsiCola pepsiCola = factory1.getPepsi();
        pepsiCola.PepsiCola();


        //生產新年版的可口可樂:
        ColaFactory factory2 = new NewYearFactory();
        CocaCola cola1 = factory2.getCocaCola();
        cola1.CocaCola();

        //生產新年版的百事可樂:
        ColaFactory factory3 = new NewYearFactory();
        PepsiCola pepsiCola1 = factory3.getPepsi();
        pepsiCola1.PepsiCola();
        
    }
}

輸出結果:

生產了圣誕版的可口可樂
生產了圣誕版的百事可樂
生產了新年版的可口可樂
生產了新年版的百事可樂

這就是抽象工廠方法模式的可樂工廠,并且同一個具體工廠所生產的位于不同等級的一組產品稱為一個產品族。

5、抽象工廠模式的應用場景

  • 當需要創建的對象是一系列相互關聯或相互依賴的產品族時,比如飲料工廠內的多款飲料

  • 系統中有多個產品族,但每次只使用其中的某一族產品。比如一個只喝圣誕版的可口可樂和新年版的百事可樂

  • 系統中提供了產品的類庫,且所有產品的接口相同,客戶端不依賴產品實例的創建細節和內部結構。

6、抽象工廠模式的擴展

  • 當增加一個新的產品族時只需增加一個新的具體工廠,不需要修改原代碼,滿足開閉原則

  • 當產品族中需要增加一個新種類的產品時,則所有的工廠類都需要進行修改,不滿足開閉原則

注意: 當系統中只存在一個等級結構的產品時,抽象工廠模式將退化到工廠方法模式

最后:一張圖看懂簡單工廠模式、工廠方法模式、抽象工廠模式:

Java中什么是抽象工廠

關于“Java中什么是抽象工廠”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳新县| 什邡市| 治县。| 朔州市| 内丘县| 聂荣县| 林州市| 铜陵市| 万宁市| 漯河市| 东兴市| 东港市| 抚顺县| 和平县| 汉沽区| 二连浩特市| 南充市| 开阳县| 尼木县| 刚察县| 霍林郭勒市| 东乌珠穆沁旗| 永定县| 彩票| 龙泉市| 灵寿县| 青河县| 盐亭县| 宁国市| 白山市| 西昌市| 辽中县| 临海市| 增城市| 大方县| 阿鲁科尔沁旗| 黔东| 湘阴县| 广宗县| 沅江市| 阿克|