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

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

這篇具有很好參考價值的文章主要介紹了[設(shè)計模式Java實現(xiàn)附plantuml源碼~創(chuàng)建型] 產(chǎn)品族的創(chuàng)建——抽象工廠模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言:
為什么之前寫過Golang 版的設(shè)計模式,還在重新寫Java 版?
答:因為對于我而言,當(dāng)然也希望對正在學(xué)習(xí)的大伙有幫助。Java作為一門純面向?qū)ο蟮恼Z言,更適合用于學(xué)習(xí)設(shè)計模式。
為什么類圖要附上uml
因為很多人學(xué)習(xí)有做筆記的習(xí)慣,如果單純的只是放一張圖片,那么學(xué)習(xí)者也只能復(fù)制一張圖片,可復(fù)用性較低,附上uml,方便有新理解時,快速出新圖。


??[設(shè)計模式Java實現(xiàn)附plantuml源碼]專鏈

  1. 確保對象的唯一性~單例模式
  2. 集中式工廠的實現(xiàn)~簡單工廠模式
  3. 多態(tài)工廠的實現(xiàn)——工廠方法模式
  4. 產(chǎn)品族的創(chuàng)建——抽象工廠模式
  5. 對象的克隆~原型模式
  6. 復(fù)雜對象的組裝與創(chuàng)建——建造者模式


工廠方法模式通過引入工廠等級結(jié)構(gòu),解決了簡單工廠模式中工廠類職責(zé)太重的問題。但由于工廠方法模式中的每個工廠只生產(chǎn)一類產(chǎn)品,可能會導(dǎo)致系統(tǒng)中存在大量的工廠類,勢必會增加系統(tǒng)的開銷。此時,可以考慮將一些相關(guān)的產(chǎn)品組成一個“產(chǎn)品族”,由同一個工廠來統(tǒng)一生產(chǎn),這就是本章將要學(xué)習(xí)的抽象工廠模式的基本思想。

為了更好地理解抽象工廠模式,這里先引入如下兩個概念:
(1)產(chǎn)品等級結(jié)構(gòu)。產(chǎn)品等級結(jié)構(gòu)即產(chǎn)品的繼承結(jié)構(gòu),例如一個抽象類是電視機,其子類有海爾電視機、海信電視機、TCL電視機,則抽象電視機與具體品牌的電視機之間構(gòu)成了一個產(chǎn)品等級結(jié)構(gòu),抽象電視機是父類,而具體品牌的電視機是其子類。
(2)產(chǎn)品族。在抽象工廠模式中,產(chǎn)品族是指由同一個工廠生產(chǎn)的,位于不同產(chǎn)品等級結(jié)構(gòu)中的一組產(chǎn)品。例如海爾電器工廠生產(chǎn)的海爾電視機、海爾電冰箱,海爾電視機位于電視機產(chǎn)品等級結(jié)構(gòu)中,海爾電冰箱位于電冰箱產(chǎn)品等級結(jié)構(gòu)中,海爾電視機、海爾電冰箱構(gòu)成了一個產(chǎn)品族。
[設(shè)計模式Java實現(xiàn)附plantuml源碼~創(chuàng)建型] 產(chǎn)品族的創(chuàng)建——抽象工廠模式,設(shè)計模式,設(shè)計模式,java,抽象工廠模式

抽象工廠模式為創(chuàng)建一組對象提供了一種解決方案。與工廠方法模式相比,抽象工廠模式中的具體工廠不只是創(chuàng)建一種產(chǎn)品,它負責(zé)創(chuàng)建一族產(chǎn)品。
抽象工廠模式定義如下:抽象工廠模式(Abstract Factory Pattern):提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,它是一種對象創(chuàng)建型模式。

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

@startuml

abstract class 抽象產(chǎn)品族1海爾{}

class 產(chǎn)品1電視機 extends 抽象產(chǎn)品族1海爾 {}
class 產(chǎn)品2洗衣機 extends 抽象產(chǎn)品族1海爾 {}

abstract class 抽象產(chǎn)品族2{}

abstract class 抽象工廠 {

+ 生產(chǎn)抽象產(chǎn)品族1():抽象產(chǎn)品族1海爾
+ 生產(chǎn)抽象產(chǎn)品族2():抽象產(chǎn)品族2
}

class 具體工廠1 extends 抽象產(chǎn)品族1海爾 implements 抽象工廠 {
+ 生產(chǎn)產(chǎn)品1():抽象產(chǎn)品族1海爾
+ 生產(chǎn)產(chǎn)品2():抽象產(chǎn)品族1海爾
}

具體工廠1 -up-> 產(chǎn)品1電視機
具體工廠1 -up-> 產(chǎn)品2洗衣機

@enduml

在抽象工廠模式結(jié)構(gòu)圖中包含以下4個角色。
(1)AbstractFactory(抽象工廠):它聲明了一組用于創(chuàng)建一族產(chǎn)品的方法,每個方法對應(yīng)一種產(chǎn)品。
(2)ConcreteFactory(具體工廠):它實現(xiàn)了在抽象工廠中聲明的創(chuàng)建產(chǎn)品的方法,生成一組具體產(chǎn)品,這些產(chǎn)品構(gòu)成了一個產(chǎn)品族,每種產(chǎn)品都位于某個產(chǎn)品等級結(jié)構(gòu)中。
(3)AbstractProduct(抽象產(chǎn)品):它為每種產(chǎn)品聲明接口,在抽象產(chǎn)品中聲明了產(chǎn)品所具有的業(yè)務(wù)方法。
(4)ConcreteProduct(具體產(chǎn)品):它定義具體工廠生產(chǎn)的具體產(chǎn)品對象,實現(xiàn)在抽象產(chǎn)品接口中聲明的業(yè)務(wù)方法。

代碼實現(xiàn)

public class AbstractFactoryDemo {
    // 抽象產(chǎn)品族1
    static abstract class AbstractProductFamily1 {}

    // 產(chǎn)品1
    static class Product1 extends AbstractProductFamily1 {}

    // 產(chǎn)品2
    static class Product2 extends AbstractProductFamily1 {}

    // 抽象產(chǎn)品族2
    static abstract class AbstractProductFamily2 {}

    // 抽象工廠
    interface AbstractFactory {
        AbstractProductFamily1 createProductFamily1();
        AbstractProductFamily2 createProductFamily2();
    }

    // 具體工廠1
    static class ConcreteFactory1 implements AbstractFactory {
        @Override
        public AbstractProductFamily1 createProductFamily1() {
            return new Product1();
        }

        @Override
        public AbstractProductFamily2 createProductFamily2() {
            // 在具體工廠1中創(chuàng)建抽象產(chǎn)品族2的實例
            return null; // 根據(jù)具體情況進行實現(xiàn)
        }
    }


    public static void main(String[] args) {
        // 創(chuàng)建具體工廠1的實例
        AbstractFactory factory = new ConcreteFactory1();

        // 使用具體工廠1創(chuàng)建抽象產(chǎn)品族1的實例
        AbstractProductFamily1 product1 = factory.createProductFamily1();
        AbstractProductFamily1 product2 = factory.createProductFamily1();
        System.out.println(product1);
        System.out.println(product2);

        // 使用具體工廠1創(chuàng)建抽象產(chǎn)品族2的實例
        AbstractProductFamily2 product3 = factory.createProductFamily2();
        System.out.println(product3);

    }

}

抽象工廠總結(jié)

抽象工廠模式的主要優(yōu)點如下:

(1)抽象工廠模式隔離了具體類的生成,使得客戶并不需要知道什么被創(chuàng)建。由于這種隔離,更換一個具體工廠就變得相對容易,所有的具體工廠都實現(xiàn)了在抽象工廠中聲明的那些公共接口,因此只需改變具體工廠的實例,就可以在某種程度上改變整個軟件系統(tǒng)的行為。
(2)當(dāng)一個產(chǎn)品族中的多個對象被設(shè)計成一起工作時,它能夠保證客戶端始終只使用同一個產(chǎn)品族中的對象。
(3)增加新的產(chǎn)品族很方便,無須修改已有系統(tǒng),符合開閉原則。

抽象工廠模式的主要缺點是:

增加新的產(chǎn)品等級結(jié)構(gòu)麻煩,需要對原有系統(tǒng)進行較大的修改,甚至需要修改抽象層代碼,這顯然會帶來較大的不便,違背了開閉原則。

適用場景

在以下情況下可以考慮使用抽象工廠模式:
(1)一個系統(tǒng)不應(yīng)當(dāng)依賴于產(chǎn)品類實例如何被創(chuàng)建、組合和表達的細節(jié),這對于所有類型的工廠模式都是很重要的,用戶無須關(guān)心對象的創(chuàng)建過程,將對象的創(chuàng)建和使用解耦。
(2)系統(tǒng)中有多于一個的產(chǎn)品族,而每次只使用其中某一個產(chǎn)品族。可以通過配置文件等方式來使得用戶可以動態(tài)改變產(chǎn)品族,也可以很方便地增加新的產(chǎn)品族。
(3)屬于同一個產(chǎn)品族的產(chǎn)品將在一起使用,這一約束必須在系統(tǒng)的設(shè)計中體現(xiàn)出來。同一個產(chǎn)品族中的產(chǎn)品可以是沒有任何關(guān)系的對象,但是它們都具有一些共同的約束。例如同一操作系統(tǒng)下的按鈕和文本框,按鈕與文本框之間沒有直接關(guān)系,但它們都是屬于某一操作系統(tǒng)的,此時具有一個共同的約束條件:操作系統(tǒng)的類 型。
(4)產(chǎn)品等級結(jié)構(gòu)穩(wěn)定,設(shè)計完成之后,不會向系統(tǒng)中增加新的產(chǎn)品等級結(jié)構(gòu)或者刪除已有的產(chǎn)品等級結(jié)構(gòu)。文章來源地址http://www.zghlxwxcb.cn/news/detail-814101.html

到了這里,關(guān)于[設(shè)計模式Java實現(xiàn)附plantuml源碼~創(chuàng)建型] 產(chǎn)品族的創(chuàng)建——抽象工廠模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • java 設(shè)計模式--創(chuàng)建者模式

    java 設(shè)計模式--創(chuàng)建者模式

    參考:Java常見設(shè)計模式總結(jié) 概念理解一 :將復(fù)雜對象的創(chuàng)建過程分解在不同的方法中,不同的創(chuàng)建過程組裝成不同對象。對象的創(chuàng)建與產(chǎn)品本身分離開,使得對象的創(chuàng)建過程更加清晰。例如:旅游套餐售賣場景。 一個套餐大概會由機票、車票、酒店、景點門票組成。 套餐

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

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

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

    2024年01月18日
    瀏覽(26)
  • 【Java 設(shè)計模式】創(chuàng)建型之工廠方法模式

    【Java 設(shè)計模式】創(chuàng)建型之工廠方法模式

    在軟件開發(fā)中,工廠方法模式是一種常見的創(chuàng)建型設(shè)計模式, 它提供了一種將對象的實例化延遲到子類的方法 。工廠方法模式通過定義一個創(chuàng)建對象的接口,但是讓子類決定實例化哪個類。在本文中,我們將介紹 Java 設(shè)計模式中的工廠方法模式,了解其定義、使用場景以及

    2024年01月17日
    瀏覽(26)
  • 【Java 設(shè)計模式】創(chuàng)建型之抽象工廠模式

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

    在軟件開發(fā)中,抽象工廠模式是一種常見的創(chuàng)建型設(shè)計模式, 它提供了一種創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類 。抽象工廠模式的核心思想是將一組相關(guān)的產(chǎn)品組合成一個工廠,客戶端通過工廠接口創(chuàng)建一系列產(chǎn)品。在本文中,我們將介紹 Jav

    2024年01月17日
    瀏覽(26)
  • 【Java 設(shè)計模式】創(chuàng)建型之建造者模式

    【Java 設(shè)計模式】創(chuàng)建型之建造者模式

    在軟件開發(fā)中,建造者模式是一種創(chuàng)建型設(shè)計模式, 它將一個復(fù)雜對象的構(gòu)建與其表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示 。建造者模式通常包括一個指導(dǎo)者(Director)類和多個建造者(Builder)類,指導(dǎo)者負責(zé)組織建造者的構(gòu)建過程,而建造者負責(zé)具體的構(gòu)建步

    2024年01月21日
    瀏覽(20)
  • Java23種設(shè)計模式-創(chuàng)建型模式之單例模式

    單例模式 (Singleton Pattern):通過單例模式的方法創(chuàng)建的 類在當(dāng)前進程中只有一個實例 (根據(jù)需要,也有可能一個線程中屬于單例,如:僅線程上下文內(nèi)使用同一個實例),該類負責(zé) 創(chuàng)建自己的對象 ,同時 確保只有單個對象 被創(chuàng)建。 注 : 1、單例類 只能 有 一個實例 。

    2024年04月26日
    瀏覽(27)
  • 24種設(shè)計模式之創(chuàng)建者模式-Java版

    24種設(shè)計模式之創(chuàng)建者模式-Java版

    軟件設(shè)計模式是前輩們代碼設(shè)計經(jīng)驗的總結(jié),可以反復(fù)使用。設(shè)計模式共分為3大類,創(chuàng)建者模式(6種)、結(jié)構(gòu)型模式(7種)、行為型模式(11種),一共24種設(shè)計模式,軟件設(shè)計一般需要滿足7大基本原則。下面通過5章的學(xué)習(xí)一起來看看設(shè)計模式的魅力吧。 創(chuàng)建型模式(6種):本質(zhì)上就

    2024年01月22日
    瀏覽(23)
  • 【Design Pattern 23種經(jīng)典設(shè)計模式源碼大全】C/Java/Go/JS/Python/TS等不同語言實現(xiàn)

    【Design Pattern 23種經(jīng)典設(shè)計模式源碼大全】C/Java/Go/JS/Python/TS等不同語言實現(xiàn)

    經(jīng)典設(shè)計模式源碼詳解,用不同語言來實現(xiàn),包括Java/JS/Python/TypeScript/Go等。結(jié)合實際場景,充分注釋說明,每一行代碼都經(jīng)過檢驗,確??煽俊?設(shè)計模式是一個程序員進階高級的必然選擇,不懂設(shè)計模式,就像寫文章不懂得層次,蓋房子沒有結(jié)構(gòu)。只有充分懂得設(shè)計之道,

    2023年04月11日
    瀏覽(24)
  • 設(shè)計模式 代理模式(靜態(tài)代理 動態(tài)代理) 與 Spring Aop源碼分析 具體是如何創(chuàng)建Aop代理的

    設(shè)計模式 代理模式(靜態(tài)代理 動態(tài)代理) 與 Spring Aop源碼分析 具體是如何創(chuàng)建Aop代理的

    代理模式是一種結(jié)構(gòu)型設(shè)計模式,它通過創(chuàng)建一個代理對象來控制對真實對象的訪問。這種模式可以用于提供額外的功能操作,或者擴展目標(biāo)對象的功能。 在代理模式中,代理對象與真實對象實現(xiàn)相同的接口,以便在任何地方都可以使用相同的接口來調(diào)用真實對象的方法。這

    2024年01月20日
    瀏覽(29)
  • 【java設(shè)計模式】創(chuàng)建型模式介紹(工廠模式、抽象工廠模式、單例模式、建造者模式、原型模式)

    簡介 本文介紹Java設(shè)計模式中創(chuàng)建型模式的五種 一、工廠模式 工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。 工廠模式提供了一種將對象的實例化過程封裝在工廠類中的方式。通過使用工

    2024年02月16日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包