在復(fù)雜的工程管理系統(tǒng)中,經(jīng)常需要創(chuàng)建不同類型的任務(wù)、資源或報(bào)告對象,這些對象雖然遵循共同的接口,但具體實(shí)現(xiàn)卻因類型而異。如果直接在業(yè)務(wù)邏輯中通過new關(guān)鍵字實(shí)例化具體類,會導(dǎo)致代碼高度耦合,難以擴(kuò)展和維護(hù)。此時(shí),工廠方法模式(Factory Method Pattern)便提供了一個(gè)優(yōu)雅的解決方案。
工廠方法模式定義了一個(gè)用于創(chuàng)建對象的接口,但讓子類決定實(shí)例化哪一個(gè)類。工廠方法使一個(gè)類的實(shí)例化延遲到其子類。它通過將對象的創(chuàng)建過程封裝起來,使得客戶端代碼無需關(guān)心具體的創(chuàng)建細(xì)節(jié),只需依賴抽象接口,從而實(shí)現(xiàn)了依賴倒置原則,提高了系統(tǒng)的靈活性和可擴(kuò)展性。
假設(shè)我們正在開發(fā)一個(gè)工程管理服務(wù)平臺,需要處理多種類型的工程任務(wù),例如:設(shè)計(jì)任務(wù)、采購任務(wù)、施工任務(wù)。每種任務(wù)都有共同的屬性(如任務(wù)ID、名稱、負(fù)責(zé)人)和共同的行為(如啟動、暫停、生成報(bào)告),但它們的執(zhí)行邏輯和報(bào)告格式完全不同。
不使用模式的痛點(diǎn):
客戶端代碼可能會充斥著大量的if-else或switch-case判斷:`java
if (taskType.equals("DESIGN")) {
task = new DesignTask();
} else if (taskType.equals("PROCUREMENT")) {
task = new ProcurementTask();
} else if (taskType.equals("CONSTRUCTION")) {
task = new ConstructionTask();
}
task.execute();`
這種代碼對修改是封閉的,每當(dāng)新增一種任務(wù)類型,就必須修改所有創(chuàng)建任務(wù)的地方,違反了開閉原則,且難以進(jìn)行單元測試。
Task接口,聲明所有任務(wù)共有的方法,如execute()和generateReport()。Task接口,創(chuàng)建DesignTask、ProcurementTask、ConstructionTask等具體類,實(shí)現(xiàn)各自特有的業(yè)務(wù)邏輯。TaskFactory抽象類,其中聲明一個(gè)抽象的工廠方法createTask(),返回類型為Task。這個(gè)類也可以包含一些與任務(wù)創(chuàng)建相關(guān)的基礎(chǔ)邏輯。DesignTaskFactory、ProcurementTaskFactory。每個(gè)具體工廠負(fù)責(zé)實(shí)現(xiàn)createTask()方法,返回對應(yīng)的具體任務(wù)對象。重構(gòu)后的客戶端調(diào)用:`java
// 客戶端代碼只依賴于抽象工廠和抽象產(chǎn)品
TaskFactory factory = new DesignTaskFactory(); // 具體工廠可通過配置、依賴注入等方式獲得
Task task = factory.createTask(); // 創(chuàng)建具體產(chǎn)品的細(xì)節(jié)被隱藏
task.execute();`
Task接口和TaskFactory抽象交互。監(jiān)理任務(wù))時(shí),只需新增對應(yīng)的SupervisionTask類和SupervisionTaskFactory類,無需修改任何現(xiàn)有的工廠和客戶端代碼。在更復(fù)雜的工程管理服務(wù)中,工廠方法模式可以進(jìn)一步演化:
createTask()方法可以接收參數(shù)(如任務(wù)配置參數(shù)),使得工廠能根據(jù)參數(shù)創(chuàng)建更符合上下文的對象。createTask()這個(gè)步驟作為模板方法中的一個(gè)可變環(huán)節(jié)。###
在工程管理服務(wù)這類業(yè)務(wù)對象多樣、且可能頻繁擴(kuò)展的系統(tǒng)中,工廠方法模式通過將對象的創(chuàng)建與使用分離,為我們構(gòu)建了一個(gè)靈活、穩(wěn)固的架構(gòu)基礎(chǔ)。它不僅是解決對象創(chuàng)建問題的利器,更是面向?qū)ο笤O(shè)計(jì)原則(如開閉原則、依賴倒置原則)的生動實(shí)踐。正確運(yùn)用此模式,能顯著提升工程管理軟件應(yīng)對需求變化的能力。
如若轉(zhuǎn)載,請注明出處:http://m.tinted.cn/product/45.html
更新時(shí)間:2026-01-07 06:20:31