1. 程式人生 > >設計模式(四)簡單工廠模式

設計模式(四)簡單工廠模式

spa 電腦 tco null 繼承 string 我們 實例 tro

相關文章
設計模式(一)設計六大原則
設計模式(二)單例模式的七種寫法
設計模式(三)建造者模式

1.簡單工廠模式簡單介紹

定義

簡單工廠模式屬於創建型模式又叫做靜態工廠方法模式,是由一個工廠對象決定創建出哪一種產品類的實例。

簡單工廠模式結構圖

技術分享

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

  • IProduct:抽象產品類。簡單工廠模式所創建的全部對象的父類,它負責描寫敘述全部實例所共同擁有的公共接口。
  • Product:詳細產品類。是簡單工廠模式的創建目標。

2.簡單工廠模式簡單實現

這裏我們用生產電腦來舉例,如果有一個電腦的代工生產商。它眼下已經能夠代工生產聯想電腦了,隨著業務的拓展,這個代工生產商還要生產惠普和華碩的電腦,這樣我們就須要用一個單獨的類來專門生產電腦,這就用到了簡單工廠模式。以下我們來實現簡單工廠模式:

創建抽象產品類

我們創建一個電腦的抽象產品類,他有一個抽象方法用於啟動電腦:

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("華碩電腦啟動");
    }
}

創建工廠類

接下來創建一個工廠類。它提供了一個靜態方法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;
    }
}

client調用工廠類

client調用工廠類。傳入“hp”生產出惠普電腦並調用該電腦對象的start方法:

public class CreatComputer {
    public static void main(String[]args){
      ComputerFactory.createComputer("hp").start();
    }
}

3.使用簡單工廠模式的場景和優缺點

使用場景

  • 工廠類負責創建的對象比較少。
  • 客戶僅僅知道傳入工廠類的參數。對於怎樣創建對象(邏輯)不關心。

簡單工廠模式優缺點

長處:

使用戶依據參數獲得相應的類實例。避免了直接實例化類。減少了耦合性。

缺點:

可實例化的類型在編譯期間已經被確定。如果添加新類型,則須要改動工廠,違背了開放封閉原則(ASD) 。 簡單工廠須要知道全部要生成的類型,當子類過多或者子類層次過多時不適合使用。

設計模式(四)簡單工廠模式