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

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

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

4.抽象工廠模式(Abstract Factory)

4.1. 模式動(dòng)機(jī)

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

為了更清晰地理解工廠方法模式,需要先引入兩個(gè)概念:
產(chǎn)品等級(jí)結(jié)構(gòu) :產(chǎn)品等級(jí)結(jié)構(gòu)即產(chǎn)品的繼承結(jié)構(gòu),如一個(gè)抽象類是電視機(jī),其子類有海爾電視機(jī)、海信電視機(jī)、TCL電視機(jī),則抽象電視機(jī)與具體品牌的電視機(jī)之間構(gòu)成了一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu),抽象電視機(jī)是父類,而具體品牌的電視機(jī)是其子類。
產(chǎn)品族 :在抽象工廠模式中,產(chǎn)品族是指由同一個(gè)工廠生產(chǎn)的,位于不同產(chǎn)品等級(jí)結(jié)構(gòu)中的一組產(chǎn)品,如海爾電器工廠生產(chǎn)的海爾電視機(jī)、海爾電冰箱,海爾電視機(jī)位于電視機(jī)產(chǎn)品等級(jí)結(jié)構(gòu)中,海爾電冰箱位于電冰箱產(chǎn)品等級(jí)結(jié)構(gòu)中。
  • 當(dāng)系統(tǒng)所提供的工廠所需生產(chǎn)的具體產(chǎn)品并不是一個(gè)簡(jiǎn)單的對(duì)象,而是多個(gè)位于不同產(chǎn)品等級(jí)結(jié)構(gòu)中屬于不同類型的具體產(chǎn)品時(shí)需要使用抽象工廠模式。

  • 抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài)。

  • 抽象工廠模式與工廠方法模式最大的區(qū)別在于,工廠方法模式針對(duì)的是一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu),而抽象工廠模式則需要面對(duì)多個(gè)產(chǎn)品等級(jí)結(jié)構(gòu),一個(gè)工廠等級(jí)結(jié)構(gòu)可以負(fù)責(zé)多個(gè)不同產(chǎn)品等級(jí)結(jié)構(gòu)中的產(chǎn)品對(duì)象的創(chuàng)建 。當(dāng)一個(gè)工廠等級(jí)結(jié)構(gòu)可以創(chuàng)建出分屬于不同產(chǎn)品等級(jí)結(jié)構(gòu)的一個(gè)產(chǎn)品族中的所有對(duì)象時(shí),抽象工廠模式比工廠方法模式更為簡(jiǎn)單、有效率。

4..2. 模式定義

抽象工廠模式(Abstract Factory Pattern):提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無須指定它們具體的類。抽象工廠模式又稱為 Kit模式,屬于 對(duì)象創(chuàng)建型模式。

4.3. 模式結(jié)構(gòu)

抽象工廠模式包含如下角色:

  • AbstractFactory:抽象工廠

  • ConcreteFactory:具體工廠

  • AbstractProduct:抽象產(chǎn)品

  • Product:具體產(chǎn)品

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

4.4. 時(shí)序圖

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

4.5. 代碼分析

#include <iostream>
#include "AbstractFactory.h"
#include "AbstractProductA.h"
#include "AbstractProductB.h"
#include "ConcreteFactory1.h"
#include "ConcreteFactory2.h"
using namespace std;

int main(int argc, char *argv[])
{
    AbstractFactory * fc = new ConcreteFactory1();
    AbstractProductA * pa =  fc->createProductA();
    AbstractProductB * pb = fc->createProductB();
    pa->use();
    pb->eat();
    
    AbstractFactory * fc2 = new ConcreteFactory2();
    AbstractProductA * pa2 =  fc2->createProductA();
    AbstractProductB * pb2 = fc2->createProductB();
    pa2->use();
///
//  ConcreteFactory1.cpp
//  Implementation of the Class ConcreteFactory1
//  Created on:      02-十月-2014 15:04:11
//  Original author: colin
///

#include "ConcreteFactory1.h"
#include "ProductA1.h"
#include "ProductB1.h"
AbstractProductA * ConcreteFactory1::createProductA(){
    return new ProductA1();
}


AbstractProductB * ConcreteFactory1::createProductB(){
    return new ProductB1();
}
///
//  ProductA1.cpp
//  Implementation of the Class ProductA1
//  Created on:      02-十月-2014 15:04:17
//  Original author: colin
///

#include "ProductA1.h"
#include <iostream>
using namespace std;
void ProductA1::use(){
    cout << "use Product A1" << endl;
}

運(yùn)行結(jié)果:

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

4.6. 優(yōu)點(diǎn)

  • 抽象工廠模式隔離了具體類的生成,使得客戶并不需要知道什么被創(chuàng)建。由于這種隔離,更換一個(gè)具體工廠就變得相對(duì)容易。所有的具體工廠都實(shí)現(xiàn)了抽象工廠中定義的那些公共接口,因此只需改變具體工廠的實(shí)例,就可以在某種程度上改變整個(gè)軟件系統(tǒng)的行為。另外,應(yīng)用抽象工廠模式可以實(shí)現(xiàn)高內(nèi)聚低耦合的設(shè)計(jì)目的,因此抽象工廠模式得到了廣泛的應(yīng)用。

  • 當(dāng)一個(gè)產(chǎn)品族中的多個(gè)對(duì)象被設(shè)計(jì)成一起工作時(shí),它能夠保證客戶端始終只使用同一個(gè)產(chǎn)品族中的對(duì)象。這對(duì)一些需要根據(jù)當(dāng)前環(huán)境來決定其行為的軟件系統(tǒng)來說,是一種非常實(shí)用的設(shè)計(jì)模式。

  • 增加新的具體工廠和產(chǎn)品族很方便,無須修改已有系統(tǒng),符合“開閉原則”。

4.7. 缺點(diǎn)

  • 在添加新的產(chǎn)品對(duì)象時(shí),難以擴(kuò)展抽象工廠來生產(chǎn)新種類的產(chǎn)品,這是因?yàn)樵诔橄蠊S角色中規(guī)定了所有可能被創(chuàng)建的產(chǎn)品集合,要支持新種類的產(chǎn)品就意味著要對(duì)該接口進(jìn)行擴(kuò)展,而這將涉及到對(duì)抽象工廠角色及其所有子類的修改,顯然會(huì)帶來較大的不便。

  • 開閉原則的傾斜性(增加新的工廠和產(chǎn)品族容易,增加新的產(chǎn)品等級(jí)結(jié)構(gòu)麻煩)。

4.8. 適用環(huán)境

在以下情況下可以使用抽象工廠模式:

  • 一個(gè)系統(tǒng)不應(yīng)當(dāng)依賴于產(chǎn)品類實(shí)例如何被創(chuàng)建、組合和表達(dá)的細(xì)節(jié),這對(duì)于所有類型的工廠模式都是重要的。

  • 系統(tǒng)中有多于一個(gè)的產(chǎn)品族,而每次只使用其中某一產(chǎn)品族。

  • 屬于同一個(gè)產(chǎn)品族的產(chǎn)品將在一起使用,這一約束必須在系統(tǒng)的設(shè)計(jì)中體現(xiàn)出來。

  • 系統(tǒng)提供一個(gè)產(chǎn)品類的庫(kù),所有的產(chǎn)品以同樣的接口出現(xiàn),從而使客戶端不依賴于具體實(shí)現(xiàn)。

4.9. 模式應(yīng)用

在很多軟件系統(tǒng)中需要更換界面主題,要求界面中的按鈕、文本框、背景色等一起發(fā)生改變時(shí),可以使用抽象工廠模式進(jìn)行設(shè)計(jì)。

4.10. 模式擴(kuò)展

"開閉原則"的傾斜性

“開閉原則”要求系統(tǒng)對(duì)擴(kuò)展開放,對(duì)修改封閉,通過擴(kuò)展達(dá)到增強(qiáng)其功能的目的。對(duì)于涉及到多個(gè)產(chǎn)品族與多個(gè)產(chǎn)品等級(jí)結(jié)構(gòu)的系統(tǒng),其功能增強(qiáng)包括兩方面:

(1).增加產(chǎn)品族

對(duì)于增加新的產(chǎn)品族,工廠方法模式很好的支持了“開閉原則”,對(duì)于新增加的產(chǎn)品族,只需要對(duì)應(yīng)增加一個(gè)新的具體工廠即可,對(duì)已有代碼無須做任何修改。

(2).增加新的產(chǎn)品等級(jí)結(jié)構(gòu)

對(duì)于增加新的產(chǎn)品等級(jí)結(jié)構(gòu),需要修改所有的工廠角色,包括抽象工廠類,在所有的工廠類中都需要增加生產(chǎn)新產(chǎn)品的方法,不能很好地支持“開閉原則”。
抽象工廠模式的這種性質(zhì)稱為 “開閉原則”的傾斜性,抽象工廠模式以一種傾斜的方式支持增加新的產(chǎn)品,它為新產(chǎn)品族的增加提供方便,但不能為新的產(chǎn)品等級(jí)結(jié)構(gòu)的增加提供這樣的方便。

(3).工廠模式的退化

  • 當(dāng)抽象工廠模式中每一個(gè)具體工廠類只創(chuàng)建一個(gè)產(chǎn)品對(duì)象,也就是只存在一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu)時(shí),抽象工廠模式退化成工廠方法模式;當(dāng)工廠方法模式中抽象工廠與具體工廠合并,提供一個(gè)統(tǒng)一的工廠來創(chuàng)建產(chǎn)品對(duì)象,并將創(chuàng)建對(duì)象的工廠方法設(shè)計(jì)為靜態(tài)方法時(shí),工廠方法模式退化成簡(jiǎn)單工廠模式。

4.11. 總結(jié)

  • 抽象工廠模式提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,屬于對(duì)象創(chuàng)建型模式。

  • 抽象工廠模式包含四個(gè)角色抽象工廠用于聲明生成抽象產(chǎn)品的方法;具體工廠實(shí)現(xiàn)了抽象工廠聲明的生成抽象產(chǎn)品的方法,生成一組具體產(chǎn)品,這些產(chǎn)品構(gòu)成了一個(gè)產(chǎn)品族,每一個(gè)產(chǎn)品都位于某個(gè)產(chǎn)品等級(jí)結(jié)構(gòu)中;抽象產(chǎn)品為每種產(chǎn)品聲明接口,在抽象產(chǎn)品中定義了產(chǎn)品的抽象業(yè)務(wù)方法;具體產(chǎn)品定義具體工廠生產(chǎn)的具體產(chǎn)品對(duì)象,實(shí)現(xiàn)抽象產(chǎn)品接口中定義的業(yè)務(wù)方法。

  • 抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài)。抽象工廠模式與工廠方法模式最大的區(qū)別在于,工廠方法模式針對(duì)的是一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu),而抽象工廠模式則需要面對(duì)多個(gè)產(chǎn)品等級(jí)結(jié)構(gòu)。

  • 抽象工廠模式的主要優(yōu)點(diǎn)是隔離了具體類的生成,使得客戶并不需要知道什么被創(chuàng)建,而且每次可以通過具體工廠類創(chuàng)建一個(gè)產(chǎn)品族中的多個(gè)對(duì)象,增加或者替換產(chǎn)品族比較方便,增加新的具體工廠和產(chǎn)品族很方便;主要缺點(diǎn)在于增加新的產(chǎn)品等級(jí)結(jié)構(gòu)很復(fù)雜,需要修改抽象工廠和所有的具體工廠類,對(duì)“開閉原則”的支持呈現(xiàn)傾斜性

  • 抽象工廠模式適用情況包括:一個(gè)系統(tǒng)不應(yīng)當(dāng)依賴于產(chǎn)品類實(shí)例如何被創(chuàng)建、組合和表達(dá)的細(xì)節(jié);系統(tǒng)中有多于一個(gè)的產(chǎn)品族,而每次只使用其中某一產(chǎn)品族;屬于同一個(gè)產(chǎn)品族的產(chǎn)品將在一起使用;系統(tǒng)提供一個(gè)產(chǎn)品類的庫(kù),所有的產(chǎn)品以同樣的接口出現(xiàn),從而使客戶端不依賴于具體實(shí)現(xiàn)。

[上一節(jié)]設(shè)計(jì)模式-創(chuàng)建型模式之工廠方法模式(Factory Method Pattern)

[下一節(jié)]設(shè)計(jì)模式-創(chuàng)建型模式之建造者模式文章來源地址http://www.zghlxwxcb.cn/news/detail-419048.html

到了這里,關(guān)于設(shè)計(jì)模式-創(chuàng)建型模式之抽象工廠模式(Abstract Factory)的文章就介紹完了。如果您還想了解更多內(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ì)模式-抽象工廠模式(Abstract Factory Pattern)結(jié)構(gòu)|原理|優(yōu)缺點(diǎn)|場(chǎng)景|示例

    ?目錄 ????????設(shè)計(jì)模式(分類)????????設(shè)計(jì)模式(六大原則)? ? ? ? 創(chuàng)建型 ????????工廠方法?????????抽象工廠模式????????單例模式????????建造者模式????????原型模式 ? ? ?結(jié)構(gòu)型 ????????適配器模式????????裝飾器模式??????

    2024年04月22日
    瀏覽(24)
  • 抽象工廠模式(Abstract Factory)

    抽象工廠模式(Abstract Factory)

    抽象工廠是一種 創(chuàng)建型設(shè)計(jì)模式 ,它能 創(chuàng)建一系列相關(guān)的對(duì)象,而無需指定其具體類 。 1. 問題 假設(shè)你正在開發(fā)一款家具商店模擬器。你的代碼中包括一些類,用于表示: 一系列相關(guān)產(chǎn)品,例如椅子(Chair)、沙發(fā)(Sofa)和咖啡桌(CoffeeTable) 系列產(chǎn)品的不同變體,例如你

    2024年02月11日
    瀏覽(22)
  • 抽象工廠模式(Abstract Factory Pattern)

    抽象工廠模式(Abstract Factory Pattern)

    回顧工廠方法設(shè)計(jì)模式的不足:具體產(chǎn)品增加時(shí),系統(tǒng)中類的個(gè)數(shù)將成對(duì)增加,在一定程度上增加了系統(tǒng)的復(fù)雜度 產(chǎn)品等級(jí)結(jié)構(gòu):產(chǎn)品等級(jí)結(jié)構(gòu)即產(chǎn)品的繼承結(jié)構(gòu),即抽象產(chǎn)品與具體產(chǎn)品 產(chǎn)品族:在抽象工廠模式中,產(chǎn)品族是指由同一個(gè)工廠生產(chǎn)的,位于不同產(chǎn)品等級(jí)結(jié)構(gòu)

    2024年02月02日
    瀏覽(26)
  • 抽象工廠模式-Abstract Factory Pattern

    抽象工廠模式-Abstract Factory Pattern

    原文地址:https://jaune162.blog/design-pattern/abstract-factory-pattern/ 首先我們由一個(gè)實(shí)際問題來引出抽象工廠模式。 考慮這樣一個(gè)場(chǎng)景,系統(tǒng)中需要向OSS上傳文件,以及通過OSS下載文件。而在系統(tǒng)中有不同的業(yè)務(wù)在使用這兩個(gè)功能。如下圖: 偽代碼如下

    2024年02月20日
    瀏覽(20)
  • 【設(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日
    瀏覽(23)
  • Abstract Factory 抽象工廠

    Abstract Factory 抽象工廠

    提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定他們具體的類。 其中: AbstractFactory聲明一個(gè)創(chuàng)建抽象產(chǎn)品對(duì)象的操作接口。 ConcreteFactory實(shí)現(xiàn)創(chuàng)建具體產(chǎn)品對(duì)象的操作。 AbstractProduct為一類產(chǎn)品對(duì)象聲明一個(gè)接口。 ConcreteProduct定義一個(gè)將被相應(yīng)的具體工廠創(chuàng)建的

    2024年04月11日
    瀏覽(27)
  • 【Java 設(shè)計(jì)模式】創(chuàng)建型之抽象工廠模式

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

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

    2024年01月17日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包