定義:簡單工廠模式屬於建立型模式,其又被稱為工廠方法模式,這是由一個工廠物件決定建立出哪一種產品型的例項。
簡單工廠模式類圖:
在簡單工廠模式中有如下角色:
- Factory: 工廠類,這是簡單工廠模式的核心,負責實現建立例項內部的邏輯。
- IProduct:抽象產品類,這是簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所工有的公共介面。
- Product: 具體產品類,這是簡單工廠類的建立目標。
DEMO&程式碼
場景: 最近公司在接入了兩款活體檢測sdk,而且後續還會接入其他的活體檢測sdk。程式碼如下:
public abstract class AbstractLivingDetection {
/**
* 開始檢測
*/
public abstract void startDetection();
}
複製程式碼
public class HaiXinLivingDetection extends AbstractLivingDetection {
@Override
public void startDetection() {
System.out.println("開啟海鑫活體檢測");
}
}
複製程式碼
public class TongFuDunLivingDetection extends AbstractLivingDetection {
@Override
public void startDetection() {
System.out.println("開啟通付盾活體檢測");
}
}
複製程式碼
public class LivingDetectionFactory {
public static AbstractLivingDetection createLivingDetection(String type){
AbstractLivingDetection livingDetection = null;
switch (type){
case "tongfudun":
livingDetection = new TongFuDunLivingDetection();
break;
case "haixin":
livingDetection = new HaiXinLivingDetection();
break;
default:
break;
}
return livingDetection;
}
}
複製程式碼
使用場景
- 工廠類負責建立的物件比較少。
- 客戶只需知道傳入工廠類的引數,而無須關心建立物件的邏輯。
優點:
- 使使用者根據引數獲得對應的類例項,避免了直接例項化類,降低了耦合性。
缺點:
- 可例項化的型別在編譯期間已經確定。如果增加新型別,則需要修改工廠,這違背了開放封閉原則。簡單工廠需要知道所有要生成的型別,其當子類過多或者子類層次過多時不適合使用。
程式碼已上傳github