Vue框架和前後端開發詳解

1. 抽象工廠模式

  • 針對工廠方法模式無法創建一組相關或相互依賴對象的問題,引入瞭抽象工廠模式
  • 抽象工廠模式的官方定義

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

敲黑板,畫重點:

  • 提供一個創建一組相關或相互依賴對象的接口:相對工廠方法模式,抽象工廠模式的抽象工廠定義瞭多個創建對象的接口
  • 不同等級的產品:
    • 不同類的產品,又叫不同等級的產品。
    • 工廠方法模式中,隻考慮同一等級產品的生產,隻是同一等級的產品也有很多不同的型號
    • 就像電子廠隻生產遊戲機,遊戲機有多種類型:插卡的遊戲機、插光盤的遊戲機、便攜式遊戲機(玩俄羅斯方塊的那種😂)
  • 同族的產品
    • 現實生活中,電子廠不止生產遊戲機,還生產電視機、音箱等產品。
    • 這些由一個工廠生產的不同等級的產品,被稱為產品族
    • 因此,同族的不同等級的產品,就是指一個工廠能生產多類產品,與前面的創建一組相關或相互依賴對象的接口呼應
  • 以海爾和TCL兩傢公司為例,產品族和產品等級的示意圖如下

在這裡插入圖片描述

總結起來:

  • 抽象工廠模式中,工廠不再隻生產一類產品,而是可以生產多類產品
  • 也就是說,工廠可以支持多種類型的對象的創建
  • 調用者無需指定對象類型(具體的類),就可以通過工廠類創建多種類型的對象

2. UML圖

抽象工廠模式的UML圖如下:

  • 抽象工廠(Abstract Factory):定義瞭多個創建產品的接口,可以創建多個不同等級的產品
  • 具體工廠(Abstract Factory):實現抽象工廠中的抽象方法,負責創建具體的產品
  • 抽象產品(Product): 相對工廠方法模式,抽象工廠模式中的產品將是多種等級的。因此,一般會定義多個抽象產品

在這裡插入圖片描述

3. 代碼示例

  • 以海爾和TCL兩傢公司為例,實現抽象工廠模式

創建兩個抽象產品類

  • 假設產品隻有電視機和空調兩種等級
public interface TV {
    void play();
}
public interface AirConditioner {
    void heat();
}

創建具體產品類

  • 實現抽象產品接口,為海爾和TCL公司創建具體產品類
public class HaierTV implements TV{
    @Override
    public void play() {
        System.out.println("海爾電視機,銷量全國領先");
    }
}
public class TCLTV implements TV{
    @Override
    public void play() {
        System.out.println("TCL牌電視機,傢傢都在看的電視機");
    }
}
public class HaierAirConditioner implements AirConditioner{
    @Override
    public void heat() {
        System.out.println("海爾牌空調,制熱效果好,省電又省心~");
    }
}
public class TCLAirConditioner implements AirConditioner {
    @Override
    public void heat() {
        System.out.println("TCL牌空調,制熱效果杠杠的");
    }
}

創建抽象工廠類

  • 有兩個接口,分別用於創建電視機和空調
public interface AbstractFactory {
    TV getTV();
    AirConditioner getAirConditioner();
}

創建具體工廠類

  • 為海爾和TCL兩傢公司,創建具體工廠類,實現具體產品的創建
public class HaierFactory implements AbstractFactory{
    @Override
    public TV getTV() {
        return new HaierTV();
    }
    @Override
    public AirConditioner getAirConditioner() {
        return new HaierAirConditioner();
    }
}
public class TCLFactory implements AbstractFactory{
    @Override
    public TV getTV() {
        return new TCLTV();
    }
    @Override
    public AirConditioner getAirConditioner() {
        return new TCLAirConditioner();
    }
}

4. 總結

4.1 抽象工廠模式的總結

  • 創建屬於不同操作系統的視窗構件,是抽象工廠模式最早的應用。
  • 如 Java 的 AWT 中的 Button 和 Text 等構件,在 Windows 和 UNIX 中的本地實現是不同的。

適用場景:

  • 需要創建的對象是一系列相關或相互依賴的產品族
  • 不同環境,需要使用不同產品族(系統中有多個產品族,但每次隻使用其中的某一族產品)

開閉原則的傾斜性

  • 增加一個產品族,隻需要增加一個新的工廠類,無需修改已有的工廠 —— 滿足開閉原則
  • 增加一個新等級的產品,抽象工廠和具體工廠都需要進行修改 —— 不滿足開閉原則
  • 這樣的現象被稱作:開閉原則的傾斜性

4.2 工廠模式的總結

簡單工廠模式

  • 從長期的編程習慣總結出來的簡單工廠模式,需要調用者傳入對象名稱,才能為其創建指定的對象
  • 新增對象類型時,需要修改已有代碼,違背瞭開閉原則

工廠方法模式

  • 每個工廠隻負責創建一種類型的對象,是對簡單工廠模式的升級改造
  • 雖然遵守瞭開閉原則,但是容易工廠類過多,且不支持創建一組相關或相互依賴的對象的場景

抽象工廠模式

  • 將一組相關或相互依賴的對象,抽象成產品族,每個工廠負責創建一個產品族
  • 開閉原則的傾斜性:新增產品族,滿足開閉原則;新增產品,不滿足開閉原則

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: