屬于創(chuàng)建型設(shè)計模式滑黔。定義:定義一個用于創(chuàng)建對象的接口柳击,讓子類決定實例化哪個類。工廠方法使一個類的實例化延遲到其子類煮纵。
工廠方法模式結(jié)構(gòu)圖:
工廠方法模式結(jié)構(gòu)圖.jpg
在工廠方法模式中有如下角色:
- Product: 抽象產(chǎn)品類
- ConcreteProduct: 具體產(chǎn)品類垒棋,實現(xiàn)Product接口卒煞。
- Factory: 抽象工廠類,該類返回一個Product類型的對象叼架。
- ConcreteFactory: 具體工廠類畔裕,返回ConcreteProduct實例。
demo&代碼
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 abstract class AbstractLivingDetectionFactory {
public abstract <T extends AbstractLivingDetection> T createLivingDetection(Class<T> t);
}
public class LivingDetectionFactory extends AbstractLivingDetectionFactory {
@Override
public <T extends AbstractLivingDetection>T createLivingDetection(Class<T> t){
try {
return t.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}
使用場景
- 工廠類負(fù)責(zé)創(chuàng)建的對象比較少乖订。
- 客戶只需知道傳入工廠類的參數(shù)扮饶,而無須關(guān)心創(chuàng)建對象的邏輯。
優(yōu)點:
優(yōu)點
- 使用戶根據(jù)參數(shù)獲得對應(yīng)的類實例乍构,避免了直接實例化類甜无,降低了耦合性。
- 工廠方法模式不但包含簡單工廠的優(yōu)點哥遮,而且沒有違背開放封閉原則岂丘。
代碼已上傳github