自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

三言兩語說透設(shè)計(jì)模式的藝術(shù)-抽象工廠模式

開發(fā) 前端
抽象工廠模式(Abstract Factory Pattern)是一種軟件設(shè)計(jì)模式,它屬于創(chuàng)建型模式,其主要目的是創(chuàng)建一組相關(guān)或互相依賴的對(duì)象。抽象工廠模式可以對(duì)類的實(shí)例化過程進(jìn)行抽象和封裝,并且可以將不同類的實(shí)例化分配到不同的具體工廠中,從而使得同一個(gè)抽象工廠可以創(chuàng)建出不同的產(chǎn)品對(duì)象。

1、寫在前面

工廠方法模式通過定義一個(gè)工廠接口,將對(duì)象實(shí)例化的過程抽象出來。但是它存在一個(gè)問題,就是一個(gè)具體工廠只能創(chuàng)建一類產(chǎn)品,增加新的產(chǎn)品類型時(shí),需要新增具體工廠,違反開閉原則。

那么,如果我們能有一個(gè)汽車工廠,既可以生產(chǎn)普通汽車,也可以生產(chǎn)豪華汽車,那豈不美哉?這就是抽象工廠模式要解決的問題。

2、抽象工廠模式的介紹

抽象工廠模式(Abstract Factory Pattern)是一種軟件設(shè)計(jì)模式,它屬于創(chuàng)建型模式,其主要目的是創(chuàng)建一組相關(guān)或互相依賴的對(duì)象。抽象工廠模式可以對(duì)類的實(shí)例化過程進(jìn)行抽象和封裝,并且可以將不同類的實(shí)例化分配到不同的具體工廠中,從而使得同一個(gè)抽象工廠可以創(chuàng)建出不同的產(chǎn)品對(duì)象。

抽象工廠模式通過抽象層進(jìn)行解耦,可以獨(dú)立于產(chǎn)品類的具體實(shí)現(xiàn)變化,使得用戶可以更加容易地切換不同的產(chǎn)品,而不需要修改已有系統(tǒng)。當(dāng)需要?jiǎng)?chuàng)建一組相關(guān)的對(duì)象時(shí),抽象工廠模式尤為合適。它可以確保同一工廠創(chuàng)建的對(duì)象是相互兼容、協(xié)調(diào)的。

3、抽象工廠與其他相關(guān)模式

抽象工廠模式與工廠方法模式非常相似,都用于封裝對(duì)象的創(chuàng)建。區(qū)別在于,工廠方法模式中每一個(gè)工廠只創(chuàng)建一種產(chǎn)品,而抽象工廠模式可以創(chuàng)建多個(gè)相關(guān)的產(chǎn)品。抽象工廠也稱為工廠的工廠,是工廠方法模式的升級(jí)版本。

與建造者模式的區(qū)別在于,建造者模式更注重零件的裝配順序,而抽象工廠模式更注重組合,不太關(guān)心創(chuàng)建步驟。和原型模式比較,原型模式用于創(chuàng)建單個(gè)對(duì)象,而抽象工廠用于批量創(chuàng)建產(chǎn)品。

4、抽象工廠模式結(jié)構(gòu)與實(shí)現(xiàn)

抽象工廠模式的結(jié)構(gòu)

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

  • AbstractFactory:抽象工廠接口,用于創(chuàng)建抽象產(chǎn)品對(duì)象。
  • ConcreteFactory:具體工廠實(shí)現(xiàn),實(shí)現(xiàn)抽象工廠接口。
  • AbstractProduct:抽象產(chǎn)品接口,定義產(chǎn)品規(guī)范。
  • Product:具體產(chǎn)品實(shí)現(xiàn),實(shí)現(xiàn)抽象產(chǎn)品接口。
  • Client:使用不同具體工廠和產(chǎn)品的客戶。

抽象工廠模式的實(shí)現(xiàn)

我們用一個(gè)汽車制造的例子來說明抽象工廠的實(shí)現(xiàn)。這里的產(chǎn)品分為兩大類,豪華品牌和普通品牌,每個(gè)品牌都有對(duì)應(yīng)的轎車和越野車產(chǎn)品。

定義抽象工廠和產(chǎn)品接口:

interface AbstractFactory {
  createSedan(): Sedan;
  createSUV(): SUV;
}

interface Sedan {
  showInfo(): void;
}

interface SUV {
  showInfo(): void;  
}

實(shí)現(xiàn)具體工廠:

class LuxuryFactory implements AbstractFactory {

  createSedan() {
    return new LuxurySedan();
  }  

  createSUV() {
    return new LuxurySUV();
  }

}

class NormalFactory implements AbstractFactory {

  createSedan() {
    return new NormalSedan();
  }

  createSUV() {
    return new NormalSUV();
  }

}

實(shí)現(xiàn)具體產(chǎn)品:

class LuxurySedan implements Sedan {

  showInfo() {
    console.log('展示豪華轎車信息');
  }

}

class LuxurySUV implements SUV {

  showInfo() {
    console.log('展示豪華 SUV 信息');
  }

}

客戶端代碼:

const factory = new LuxuryFactory();

const sedan = factory.createSedan();
const suv = factory.createSUV();  

sedan.showInfo();
suv.showInfo();

這樣客戶可以非常方便地切換不同的工廠來獲取產(chǎn)品,而不需要關(guān)心產(chǎn)品的具體實(shí)現(xiàn)。

5、抽象工廠模式的優(yōu)缺點(diǎn)分析

使用抽象工廠模式帶來的優(yōu)點(diǎn)包括:

  • 封裝了具體產(chǎn)品的創(chuàng)建過程,客戶端無需知道實(shí)現(xiàn)
  • 可以靈活切換不同的產(chǎn)品組合,提高了靈活性
  • 易于增加新產(chǎn)品,滿足開閉原則
  • 抽象層實(shí)現(xiàn)了解耦,防止源碼泄露

但是也存在一些缺點(diǎn):

  • 過度使用會(huì)增加系統(tǒng)的復(fù)雜性
  • 增加新的產(chǎn)品時(shí),需要修改抽象工廠和所有具體工廠
  • 產(chǎn)品無法實(shí)現(xiàn)繼承擴(kuò)展,都在抽象層定義

所以使用時(shí)需要權(quán)衡靈活性和復(fù)雜性之間的關(guān)系,適度使用抽象工廠模式。

6、抽象工廠模式應(yīng)用于什么場(chǎng)景

抽象工廠模式應(yīng)用的主要場(chǎng)景包括:

  • 當(dāng)需要?jiǎng)?chuàng)建的對(duì)象是一組相關(guān)的產(chǎn)品族時(shí),如電器包含電視、洗衣機(jī)等
  • 系統(tǒng)需要多個(gè)產(chǎn)品系列,而使用者只需要使用其中某一系列的產(chǎn)品時(shí),如不同品牌的家電
  • 當(dāng)需要屏蔽用戶與產(chǎn)品的具體實(shí)現(xiàn)時(shí),使得用戶不依賴產(chǎn)品類代碼時(shí)
  • 當(dāng)產(chǎn)品類經(jīng)常變更,而不想影響使用者時(shí)
  • 當(dāng)提供一個(gè)產(chǎn)品類庫,而只想顯示其中部分產(chǎn)品時(shí)
  • 需要生成不同平臺(tái)下的程序時(shí),如Windows、Linux等

在這些情況下,使用抽象工廠模式可以帶來很大的靈活性,使得用戶可以方便切換不同的產(chǎn)品,而不需要修改已有代碼。

抽象工廠模式通過提供一個(gè)創(chuàng)建一組相關(guān)對(duì)象的接口,將客戶端與對(duì)象的具體實(shí)現(xiàn)解耦,使得把兼容的對(duì)象組合在一起變得更加容易。當(dāng)添加新的產(chǎn)品對(duì)象時(shí),無需修改已有系統(tǒng),滿足開閉原則。

適用于需要?jiǎng)?chuàng)建一組相關(guān)的對(duì)象,提供最大化的靈活性和復(fù)用性的場(chǎng)景。但也要注意合理使用,過度使用會(huì)增加系統(tǒng)的復(fù)雜度。

7、總結(jié)

抽象工廠模式的主要優(yōu)點(diǎn)是封裝了對(duì)象的創(chuàng)建過程,提高了系統(tǒng)的靈活性,可以輕松切換不同的產(chǎn)品配置。使用者無需知道具體實(shí)現(xiàn)。另外它也符合開閉原則,容易擴(kuò)展新產(chǎn)品。

缺點(diǎn)在于過度使用會(huì)增加系統(tǒng)的復(fù)雜性和抽象性。而且新增產(chǎn)品時(shí)需要修改抽象工廠接口,不太容易實(shí)現(xiàn)產(chǎn)品的繼承擴(kuò)展。

主要適用于需要?jiǎng)?chuàng)建產(chǎn)品族的場(chǎng)景,需要屏蔽產(chǎn)品具體實(shí)現(xiàn)的場(chǎng)景,以及產(chǎn)品配置經(jīng)常變化的場(chǎng)景。

總體來說,抽象工廠模式在保持系統(tǒng)靈活性和可擴(kuò)展性方面意義重大。但也需要權(quán)衡增加的抽象性帶來的復(fù)雜度。

責(zé)任編輯:姜華 來源: 宇宙一碼平川
相關(guān)推薦

2023-08-04 07:26:55

工廠類集中化設(shè)計(jì)模式

2023-08-05 13:31:20

工廠方法模式對(duì)象

2023-08-03 08:01:27

單例模式結(jié)構(gòu)開發(fā)

2023-08-08 20:13:36

設(shè)計(jì)模式原型模式

2023-08-15 11:07:37

適配器模式TypeScript

2023-07-30 15:14:19

Koa蔥圈模型

2023-08-07 08:01:09

Vuewebpack開發(fā)

2023-08-02 08:01:14

柯里化反柯里化

2023-07-27 15:04:10

Node.js核心API

2021-03-06 22:50:58

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

2020-10-19 09:28:00

抽象工廠模式

2021-09-29 13:53:17

抽象工廠模式

2009-01-15 10:55:29

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

2020-12-17 09:38:16

設(shè)計(jì)模式參數(shù)

2011-07-28 09:50:58

設(shè)計(jì)模式

2024-09-14 08:24:44

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

2024-03-06 13:19:19

工廠模式Python函數(shù)

2020-08-21 07:23:50

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

2022-01-12 13:33:25

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

2011-11-17 16:03:05

Java工廠模式Clojure
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)