Java設計模式之簡單工廠模式 定義 使用場景 角色 實踐 優缺點

簡單工廠模式不屬於23種 GoF(Gang of Four)設計模式之一。

定義

簡單工廠模式(又叫作靜態方法工廠模式),其屬於創建型設計模式,由一個工廠對象決定創建出那一種產品類的實例。

使用場景

  • 工廠類負責創建的對象比較少。
  • 客戶只需要知道傳入工廠類的參數,而無需關心創建對象的邏輯。

角色

簡單工廠模式有如下角色:

  • Factory:工廠類,這是簡單工廠模式的核心。它負責實現創建所有實例的內部邏輯。工廠類的創建產品類的方法可以被外界直接調用,創建所需的產品對象。

  • IProduct:抽象產品類,這是簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所有的公共接口。

  • Product:具體產品類,這是簡單工廠模式的創建目標。

實踐

這裏我們用生產計算機來舉例,假設有一個計算機的代工生產商,它目前已經可以帶工生產聯想計算機了。隨着業務的拓展,這家代工廠還要生產惠普和華碩計算機。這樣我們就需要用一個單獨的類來專門生產計算機,這就用到了簡單工廠模式。寫下來具體看代碼詳解:

  1. 首先創建一個計算機的抽象產品類,其中有一個抽象方法用戶啓動計算機生產:
public abstract class Computer {
    /**
     * 產品的抽象方法,由具體的產品類實現
     */
    public abstract void start();
}
  1. 接着我們創建各個品牌的計算機,其都繼承了自己的父類 Computer ,並實現了父類的 start 方法。
public class LenovoComputer extends Computer {

    @Override
    public void start() {
        System.out.println("聯想計算機啓動");
    }
}

public class HpComputer extends Computer {
    @Override
    public void start() {
        System.out.println("惠普計算機啓動");
    }
}

public class AsusComputer extends Computer {
    @Override
    public void start() {
        System.out.println("華碩計算機啓動");
    }
}
  1. 接下來創建工廠類, 它提供一個靜態方法 creatComputer 用來生產計算機。你只需要傳入自己想生產的計算機品牌,它就會實例化相應品牌的計算機對象。
public class ComputerFactory {
    public static Computer createComputer(String type) {
        Computer mComputer = null;
        switch (type){
            case "lenovo":
                mComputer = new LenovoComputer();
                break;
            case "hp":
                mComputer = new HpComputer();
                break;
            case "asus":
                mComputer = new AsusComputer();
                break;
        }
        return mComputer;
    }
}
  1. 客戶端調用工廠類,傳入 hp 生產出惠普計算機並調用該計算機對象的 start 方法。
public class CreateComputer {
    public static void main(String[] args){
        ComputerFactory.createComputer("hp").start();
    }
}

優缺點

優點:使用戶根據參數獲得相應的類實例,避免了直接實例化類,降低了耦合度。
缺點:可實例化的類型在編譯期間已經被確定,如果增加新類型,則需要修改工廠,這違背了封閉原則。簡單工廠需要知道所有要生產的類型,其當子類過多或者子類層次過多時不適合使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章