簡單工廠模式(又叫作靜態工廠方法模式),其屬於創建型設計模式。首先先看看它的定義。
定義:簡單工廠模式屬於創建型模式,其又被稱爲靜態工廠方法模式,這是由一個工廠對象決定創建出
哪一種產品類的實例。
在簡單工廠模式下有如下角色:
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:客戶只需知道傳入工廠類的參數,而無須關心創建對象的邏輯
優點:使用戶根據參數獲得對應的類實例,避免了直接實例化類,降低了耦合度。
缺點:可實例化的類型在編譯期間已經被確定。如果增加新類型,則需要修改工廠,這違背了開發封閉的
原則,簡單工廠需要知道所有要生成的類型,其當子類過多或者子類層次過多時不適合使用。
再累再苦,只當自己是二百五,再艱再險,只當自己是二皮臉。與君共勉~