天天看點

簡單工廠模式是什麼?如何實作一個簡單工廠模式?

簡單工廠模式是什麼?如何實作一個簡單工廠模式?

簡單工廠模式(Simple Factory Pattern)是一種建立型的設計模式,主要用于建立對象執行個體。在簡單工廠設計模式中,工廠類主要是負責建立其他類的對象,而用戶端則不需要直接建立對象,隻需要向工廠類請求所需的對象就可以了。通過簡單工廠我們可以将對象的建立邏輯封裝其中,這樣可以降低用戶端與具體對象之間的耦合度,提升業務代碼的擴充性。

簡單工廠模式的設計思路

第一步、定義接口或抽象類

簡單工廠設計模式首先需要确定的就是建立的對象的公共接口或者抽象類,這個接口或抽象類定義主要就是用來定義對象的行為或方法。

第二步、建立具體類

根據接口類來實作接口或抽象類的具體操作類,這些操作類就是實作了接口或抽象類中定義的方法,然後對其進行了具體的實作。

第三步、建立工廠類

建立工廠類,這個工廠類就是負責根據用戶端的請求來建立具體的對象執行個體。在這個工廠類中通常包含一個可以根據不同的條件或參數建立對象的方法,它的傳回值就是不同類型的對象執行個體。

第四步、用戶端使用

在進行用戶端調用的時候通過工廠類的方法建立所需的對象執行個體,用戶端不需要直接建立對象。隻需要知道需要什麼類型的對象,不需要了解對象的建立細節。

簡單工廠模式的實作示例

假設我們有一個形狀接口 Shape,以及兩個實作類 Circle 和 Rectangle,它們都實作了 Shape 接口。我們通過簡單工廠模式建立不同類型的形狀對象。如下所示。

// 形狀接口
public interface Shape {
    void draw();
}

// 圓形類
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("畫一個圓形");
    }
}

// 矩形類
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("畫一個矩形");
    }
}

// 形狀工廠類
public class ShapeFactory {
    // 根據類型建立形狀對象
    public Shape createShape(String type) {
        if ("circle".equalsIgnoreCase(type)) {
            return new Circle();
        } else if ("rectangle".equalsIgnoreCase(type)) {
            return new Rectangle();
        } else {
            throw new IllegalArgumentException("不支援的形狀類型");
        }
    }
}

// 用戶端代碼
public class Client {
    public static void main(String[] args) {
        // 建立形狀工廠對象
        ShapeFactory factory = new ShapeFactory();
        
        // 建立圓形對象
        Shape circle = factory.createShape("circle");
        circle.draw(); // 輸出:畫一個圓形
        
        // 建立矩形對象
        Shape rectangle = factory.createShape("rectangle");
        rectangle.draw(); // 輸出:畫一個矩形
    }
}
           

在上面的示例中,ShapeFactory 類充當了簡單工廠的角色,有它來負責根據用戶端請求建立不同類型的形狀對象。用戶端隻需要向工廠類請求所需的形狀對象,而不需要直接與具體的形狀類互動。這樣可以降低用戶端與具體形狀類之間的耦合度,并且友善地擴充新的形狀類。

簡單工廠模式适用于以下場景

  • 對象建立邏輯相對簡單:當對象的建立邏輯相對簡單,不涉及複雜的條件判斷或者依賴關系時,可以考慮使用簡單工廠模式。
  • 用戶端隻需要知道對象類型:當用戶端隻需要知道對象的類型,而不需要了解對象的建立細節時,可以使用簡單工廠模式。用戶端隻需要調用工廠類的方法,并傳入相應的參數或條件,即可擷取所需的對象執行個體。
  • 需要将對象的建立邏輯封裝起來:如果需要将對象的建立邏輯進行封裝,友善進行統一的對象配置設定管理維護的時候,我們可以考慮使用簡單工廠模式。通過簡單工廠模式将對象的建立邏輯封裝在工廠類中,可以隐藏一些對象的實作細節。

根據上面的介紹,我們知道,通過簡單工廠模式,實作對象之間的解耦。使得代碼靈活性更高,更容易擴充。