定義:簡(jiǎn)單工廠模式屬于創(chuàng)建型模式,其又被稱為工廠方法模式,這是由一個(gè)工廠對(duì)象決定創(chuàng)建出哪一種產(chǎn)品型的實(shí)例。
簡(jiǎn)單工廠模式類圖:

簡(jiǎn)單工廠模式類圖.jpg
在簡(jiǎn)單工廠模式中有如下角色:
- Factory: 工廠類,這是簡(jiǎn)單工廠模式的核心,負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建實(shí)例內(nèi)部的邏輯。
- IProduct:抽象產(chǎn)品類,這是簡(jiǎn)單工廠模式所創(chuàng)建的所有對(duì)象的父類,它負(fù)責(zé)描述所有實(shí)例所工有的公共接口。
- Product: 具體產(chǎn)品類,這是簡(jiǎn)單工廠類的創(chuàng)建目標(biāo)。
DEMO&代碼
場(chǎng)景: 最近公司在接入了兩款活體檢測(cè)sdk,而且后續(xù)還會(huì)接入其他的活體檢測(cè)sdk。代碼如下:
public abstract class AbstractLivingDetection {
/**
* 開(kāi)始檢測(cè)
*/
public abstract void startDetection();
}
public class HaiXinLivingDetection extends AbstractLivingDetection {
@Override
public void startDetection() {
System.out.println("開(kāi)啟海鑫活體檢測(cè)");
}
}
public class TongFuDunLivingDetection extends AbstractLivingDetection {
@Override
public void startDetection() {
System.out.println("開(kāi)啟通付盾活體檢測(cè)");
}
}
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;
}
}
使用場(chǎng)景
- 工廠類負(fù)責(zé)創(chuàng)建的對(duì)象比較少。
- 客戶只需知道傳入工廠類的參數(shù),而無(wú)須關(guān)心創(chuàng)建對(duì)象的邏輯。
優(yōu)點(diǎn):
- 使用戶根據(jù)參數(shù)獲得對(duì)應(yīng)的類實(shí)例,避免了直接實(shí)例化類,降低了耦合性。
缺點(diǎn):
- 可實(shí)例化的類型在編譯期間已經(jīng)確定。如果增加新類型,則需要修改工廠,這違背了開(kāi)放封閉原則。簡(jiǎn)單工廠需要知道所有要生成的類型,其當(dāng)子類過(guò)多或者子類層次過(guò)多時(shí)不適合使用。
代碼已上傳github