設計模式之簡單工廠模式

簡單工廠模式(又叫作靜態工廠方法模式),其屬於創建型設計模式。首先先看看它的定義。
定義:簡單工廠模式屬於創建型模式,其又被稱爲靜態工廠方法模式,這是由一個工廠對象決定創建出
哪一種產品類的實例。
在簡單工廠模式下有如下角色:
Factory : 工廠類,這是簡單工廠模式的核心,它負責實現和創建所有實例的內部邏輯。工廠類的創建產
品類的方法可以被外界直接調用,創建所需產品對象。
IProduct:抽象產品類,這是簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公
共接口。
Product:具體產品類,這是簡單工廠模式的創建目標。

實現:
我們這裏使用生產手機來舉例,假如有個手機代工生產廠商,它目前可以生產小米手機。隨着廠商的發展,
這個廠商又接到了華爲和蘋果的代工訂單,這樣我們就用到了簡單工廠模式。下面我們看看代碼。

抽象產品類
我們創建一個手機的抽象產品類,其中有一個抽象方法用於手機開機。

public abstract class Phone {
    /**
     * 產品的抽象方法,由具體的產品類實現
     */
    public abstract void boot();
}

具體產品類
接着我們創建各個手機品牌,都繼承了自己的父類,並實現了父類的boot方法。

public class XiaoMiPhone extends Phone{

    @Override
    public void boot() {
        Log.e("TAG","小米手機啓動");
    }
}


public class HuaweiPhone extends Phone{

    @Override
    public void boot() {
        Log.e("TAG","華爲手機啓動");
    }
}


public class IPhone extends Phone{

    @Override
    public void boot() {
        Log.e("TAG","蘋果手機啓動");
    }
}

工廠類
創建一個工廠類,它提供了一個靜態方法CreatePhone用於生產手機,只需要傳入生產手機的品牌,它就
會實例化相應品牌的計算機。

public class PhoneFactoty{
    public static final String XIAOMI = "xiaomi";
    public static final String HUAWEI = "huawei";
    public static final String IPHONE = "iphone";
    public static Phone cratePhone(String type){
        Phone phone = null;
        switch (type){
            case XIAOMI:
                phone = new XiaoMiPhone();
                break;
            case HUAWEI:
                phone = new HuaweiPhone();
                break;
            case IPHONE:
                phone = new IPhone();
                break;
        }
        return phone;
    }
}

接下來看看客戶端如何使用這個工廠類:

public class CreatePhone{
    public static void main(String [] args){
        PhoneFactoty.cratePhone(PhoneFactoty.XIAOMI).boot();
    }
}

使用簡單工廠模式的場景和優缺點
使用場景:
1:工廠類負責創建的對象比較少
2:客戶只需知道傳入工廠類的參數,而無須關心創建對象的邏輯
優點:使用戶根據參數獲得對應的類實例,避免了直接實例化類,降低了耦合度。
缺點:可實例化的類型在編譯期間已經被確定。如果增加新類型,則需要修改工廠,這違背了開發封閉的
原則,簡單工廠需要知道所有要生成的類型,其當子類過多或者子類層次過多時不適合使用。

再累再苦,只當自己是二百五,再艱再險,只當自己是二皮臉。與君共勉~
 

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