掌握設計模式之簡單工廠模式

渊渟岳發表於2024-12-04

簡單工廠模式

簡單工廠模式(Simple Factory Pattern)是一種建立型設計模式,它定義了一個工廠類,該類可以根據傳入的引數決定建立哪種產品類的例項。簡單工廠模式將物件的建立邏輯封裝在一個工廠類中,客戶端只需要透過工廠類獲取例項,而不需要直接涉及例項化的細節。

簡單工廠模式包含三個主要部分:

  1. 產品介面(或抽象類):定義產品的共同介面,所有具體產品都實現該介面。
  2. 具體產品:實現產品介面,提供具體的實現。
  3. 工廠類:負責根據客戶端的請求建立具體的產品例項。

透過案例理解

案例概述

一個圖形工廠,生成出兩種畫圖工具(圓形和矩形),透過生產出來的畫圖工具進行繪圖。

案例結構

image

使用者(SimpleFactoryDemo)只需要知道,工廠方法類(ShapeFactory)和產品介面(Shape)即可。你寫得程式碼不需要import具體的類進入你的程式碼,只需要匯入介面和工廠類即可,這使得客戶端的程式碼不會和具體的類耦合到一起,這也是面向抽象(介面或抽象類)程式設計的一大好處,使用的是多型的特性。

案例程式碼

// 產品介面 - 圖形
interface Shape {
    void draw();
}

// 具體產品 - 圓形
class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("繪製圓形");
    }
}

// 具體產品 - 矩形
class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("繪製矩形");
    }
}

// 工廠類
class ShapeFactory {
    public static Shape createShape(String type) {
        switch (type) {
            case "circle":
                return new Circle();
            case "rectangle":
                return new Rectangle();
            default:
                throw new IllegalArgumentException("無效的形狀型別: " + type);
        }
    }
}

// 客戶端程式碼
public class SimpleFactoryDemo {
    public static void main(String[] args) {
        // 建立圓形
        Shape circle = ShapeFactory.createShape("circle");
        circle.draw();

        // 建立矩形
        Shape rectangle = ShapeFactory.createShape("rectangle");
        rectangle.draw();
    }
}

案例簡析

這就好比如我手上只有一支筆,只需要在畫圖工具介面上選擇什麼形狀就可以畫什麼形狀。

如果某天我想加入五角星形,那需要新增五角星形類和修改工廠類即可。

如果某天我想刪除矩形,只需要修改工廠方法即可,甚至都不要刪除Rectangle

簡單工廠模式的優缺點

優點:

  • 封裝了物件的建立過程:客戶端程式碼只需要呼叫工廠的createShape()方法,不需要知道具體的產品類的構造過程。
  • 便於擴充套件:只需要擴充套件新的產品類,並在工廠中增加相應的建立方法即可。

缺點:

  • 工廠類職責過重:隨著產品種類的增多,工廠類會變得非常龐大且難以維護,因為工廠類需要處理所有型別的例項化。
  • 不符合開閉原則:每增加一個新的產品類,都需要修改工廠類,違反了開閉原則。

總結

簡單工廠模式是一種透過一個工廠類來建立不同型別物件的模式,客戶端不需要關心物件的建立過程,只需要呼叫工廠方法來獲取所需的物件。它適用於物件較少且不會頻繁變動的場景。隨著產品型別的增加,簡單工廠模式可能變得難以維護,因此對於複雜的情況,通常會考慮使用工廠方法模式或抽象工廠模式。

image

什麼是設計模式?

單例模式及其思想

設計模式--原型模式及其程式設計思想

掌握設計模式之生成器模式

超實用的SpringAOP實戰之日誌記錄

2023年下半年軟考考試重磅訊息

透過軟考後卻領取不到實體證書?

計算機演算法設計與分析(第5版)

Java全棧學習路線、學習資源和麵試題一條龍

軟考證書=職稱證書?

軟考中級--軟體設計師毫無保留的備考分享

相關文章