設計模式:簡單工程模式
定義以及結構
定義
簡單工程模式屬於創建型模式,又稱爲靜態工程方法模式,在簡單工程模式中,可以根據參數的不同,來返回不同類的實例,靜態工廠模式專門定義一個類來負責創建子類的實例,被創建的子類通常有一個共同的父類
結構圖
一般分爲三類:
- Factory:工廠類,簡單工程模式的核心,它負責實現創建所有實例的內部邏輯。工廠類的創建產品類的方法可以被外界直接調用,用來創建所需的產品對象。
- IProduce:抽象產品類,簡單工程模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口
- Product:具體產品類,是簡單工程模式的目標類。
實現
假設有一個筆類生產商,想生產不同的筆種,所以就需要用一個單獨的類來專門生產筆。
產品抽象類
public abstract class Pen {
// 產品的抽象方法,由具體的產品類去實現
public abstract void start();
}
具體實現類
public class Pencil extends Pen {
@Override
public void start(){
System.out.println("pencil start!");
}
}
public class Ballpen extends Pen {
@Override
public void start(){
System.out.println("Ballpen start!");
}
}
工廠類
public class PenFactory {
public static Pen creatPen(String type){
Pen pen=null;
switch(type){
case "pencil":
pen=new Pencil();
break;
case "ballpen":
pen= new Ballpen();
break;
default:
break;
}
return pen;
}
}
測試
public class Test {
public static void main(String[] args) {
Pen pen=PenFactory.creatPen("pencil");
pen.start();
}
}
優缺點
優點
- 工廠類含有必要的邏輯判斷,可以決定在上面時候創建哪一個產品類實例,客戶端可以免除之間創建產品對象的責任,而僅僅消費了產品,實現了對責任的分割。
- 客戶端無序知道創建具體產品類的類名,只需知道對應的參數,方便創建
- 通過引入配置文件,可以在不改變客戶端代碼的情況下,更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。
缺點
- 由於工廠類集中就所有產品的創建邏輯,一旦出現問題,整個系統都會受影響
- 系統擴展困難,一旦添加新產品就必須要修改工廠邏輯,破壞了開閉原則,在產品較多的情況下,容易造成邏輯複雜不利於擴展以及維護
- 簡單工廠模式由於使用了靜態工程方法,造成工程角色無法形成基於繼承的等級結構
適用場景
- 工廠類負責創建的對象比較少,由於創建的對象較少,不會造成業務邏輯過於複雜
- 客戶端只需要知道創建的參數,不需要關心如何實現
最後
- 如果覺得看完有收穫,希望能給我點個贊,這將會是我更新的最大動力,感謝各位的支持
- 歡迎各位關注我的公衆號【java冢狐】,專注於java和計算機基礎知識,保證讓你看完有所收穫,不信你打我
- 如果看完有不同的意見或者建議,歡迎多多評論一起交流。感謝各位的支持以及厚愛。