1.簡單工廠模式簡介
前言
今天放假拖更幾天
定義
簡單工廠模式屬于創(chuàng)建型模式又叫做靜態(tài)工廠方法模式怠苔,是由一個工廠對象決定創(chuàng)建出哪一種產品類的實例。
簡單工廠模式結構圖
image.png
- Factory:工廠類杏糙,簡單工廠模式的核心何什,它負責實現(xiàn)創(chuàng)建所有實例的內部邏輯璧榄。工廠類的創(chuàng)建產品類的方法可以被外界直接調用树灶,創(chuàng)建所需的產品對象。
- IProduct:抽象產品類黄娘,簡單工廠模式所創(chuàng)建的所有對象的父類峭状,它負責描述所有實例所共有的公共接口克滴。
- Product:具體產品類,是簡單工廠模式的創(chuàng)建目標优床。
2.簡單工廠模式簡單實現(xiàn)
這里我們用生產電腦來舉例劝赔,假設有一個電腦的代工生產商,它目前已經可以代工生產聯(lián)想電腦了胆敞,隨著業(yè)務的拓展着帽,這個代工生產商還要生產惠普和華碩的電腦,這樣我們就需要用一個單獨的類來專門生產電腦移层,這就用到了簡單工廠模式仍翰。下面我們來實現(xiàn)簡單工廠模式:
創(chuàng)建抽象產品類
我們創(chuàng)建一個電腦的抽象產品類,他有一個抽象方法用于啟動電腦:
public abstract class Computer {
/**
* 產品的抽象方法观话,由具體的產品類去實現(xiàn)
*/
public abstract void start();
}
創(chuàng)建具體產品類
接著我們創(chuàng)建各個品牌的電腦予借,他們都繼承了他們的父類Computer ,并實現(xiàn)了父類的start方法:
聯(lián)想電腦:
public class LenovoComputer extends Computer{
@Override
public void start() {
System.out.println("聯(lián)想電腦啟動");
}
惠普電腦:
public class HpComputer extends Computer{
@Override
public void start() {
System.out.println("惠普電腦啟動");
}
}
華碩電腦:
public class AsusComputer extends Computer {
@Override
public void start() {
System.out.println("華碩電腦啟動");
}
}
創(chuàng)建工廠類
接下來創(chuàng)建一個工廠類频蛔,它提供了一個靜態(tài)方法createComputer用來生產電腦灵迫。你只需要傳入你想生產的電腦的品牌,它就會實例化相應品牌的電腦對象:
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 CreatComputer {
public static void main(String[]args){
ComputerFactory.createComputer("hp").start();
}
}
3.使用簡單工廠模式的場景和優(yōu)缺點
使用場景
- 工廠類負責創(chuàng)建的對象比較少。
- 客戶只知道傳入工廠類的參數书闸,對于如何創(chuàng)建對象(邏輯)不關心尼变。
簡單工廠模式優(yōu)缺點
優(yōu)點:
使用戶根據參數獲得對應的類實例,避免了直接實例化類浆劲,降低了耦合性嫌术。
缺點:
可實例化的類型在編譯期間已經被確定,如果增加新類型牌借,則需要修改工廠度气,違背了開放封閉原則(ASD) 。 簡單工廠需要知道所有要生成的類型膨报,當子類過多或者子類層次過多時不適合使用磷籍。