簡單工廠模式不屬于23種 GoF(Gang of Four)設計模式之一。
定義
簡單工廠模式(又叫作靜態方法工廠模式),其屬于創建型設計模式,由一個工廠對象決定創建出那一種產品類的實例。
使用場景
- 工廠類負責創建的對象比較少。
- 客戶只需要知道傳入工廠類的參數,而無需關心創建對象的邏輯。
角色
簡單工廠模式有如下角色:
Factory:工廠類,這是簡單工廠模式的核心。它負責實現創建所有實例的內部邏輯。工廠類的創建產品類的方法可以被外界直接調用,創建所需的產品對象。
IProduct:抽象產品類,這是簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所有的公共接口。
Product:具體產品類,這是簡單工廠模式的創建目標。
實踐
這里我們用生產計算機來舉例,假設有一個計算機的代工生產商,它目前已經可以帶工生產聯想計算機了。隨著業務的拓展,這家代工廠還要生產惠普和華碩計算機。這樣我們就需要用一個單獨的類來專門生產計算機,這就用到了簡單工廠模式。寫下來具體看代碼詳解:
- 首先創建一個計算機的抽象產品類,其中有一個抽象方法用戶啟動計算機生產:
public abstract class Computer {
/**
* 產品的抽象方法,由具體的產品類實現
*/
public abstract void start();
}
- 接著我們創建各個品牌的計算機,其都繼承了自己的父類
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("華碩計算機啟動");
}
}
- 接下來創建工廠類, 它提供一個靜態方法
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;
}
}
- 客戶端調用工廠類,傳入
hp
生產出惠普計算機并調用該計算機對象的start
方法。
public class CreateComputer {
public static void main(String[] args){
ComputerFactory.createComputer("hp").start();
}
}
優缺點
優點:使用戶根據參數獲得相應的類實例,避免了直接實例化類,降低了耦合度。
缺點:可實例化的類型在編譯期間已經被確定,如果增加新類型,則需要修改工廠,這違背了封閉原則。簡單工廠需要知道所有要生產的類型,其當子類過多或者子類層次過多時不適合使用。