首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

工廠方法模式:以「製造更多物件」簡化物件建立

     編輯:Java 相關知識

設計原則:複雜時就製造更多物件

Grady Booch 提出的經典原則——「若設計過於複雜,就製造更多的物件」,是解決物件建立混亂的良方。在垃圾回收範例中,main() 裡的 switch 語句直接 new 具體類別,每新增一種垃圾就得修改此處,違反單一職責原則。解決之道是將建立邏輯封裝進專門的工廠方法。

工廠方法的基本結構

工廠方法接收封裝建立資訊的 Info 物件,內部以 switch 判斷型別並回傳已上鑄為基礎類別(Trash)的參考。客戶端程式碼因此不需知道具體類別,僅透過多型操作物件。若未來需要更多建構參數,只需擴充 Info 類別(增欄位或繼承),工廠方法簽名完全不變。

程式碼演進示範

// Info 封裝建立資料
class Info {
    int type;
    static final int MAX_NUM = 4;
    double data;
    Info(int typeNum, double dat) {
        type = typeNum % MAX_NUM;
        data = dat;
    }
}

// 工廠方法集中建立邏輯
static Trash factory(Info i) {
    switch(i.type) {
        case 0: return new Aluminum(i.data);
        case 1: return new Paper(i.data);
        case 2: return new Glass(i.data);
        case 3: return new Cardboard(i.data); // 新增型別只改這裡
        default: return new Aluminum(i.data);
    }
}

// main() 變得乾淨簡潔
for(int i = 0; i < 30; i++)
    bin.addElement(Trash.factory(new Info((int)(Math.random() * Info.MAX_NUM), Math.random() * 100)));

隔離「領頭變化」

工廠方法將「新增型別」這一核心變化點封裝在單一位置。雖然 main() 中建立 Info 的程式碼仍可能隨參數改變而調整,但可進一步透過自動化建構 Info(如傳入參數向量)來消除這一耦合。這正是設計模式的核心價值:識別系統中最昂貴、最頻繁的變化,並為其建立穩定的抽象層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved