在軟件開發(fā)中,對(duì)象創(chuàng)建是一個(gè)基礎(chǔ)且頻繁的操作。當(dāng)對(duì)象的創(chuàng)建邏輯變得復(fù)雜、需要根據(jù)條件動(dòng)態(tài)創(chuàng)建,或者我們希望將創(chuàng)建過程與使用過程解耦時(shí),直接使用 new 關(guān)鍵字可能會(huì)帶來代碼的僵化、難以維護(hù)和擴(kuò)展。此時(shí),工廠模式(Factory Pattern)作為一種經(jīng)典的設(shè)計(jì)模式,便閃耀登場(chǎng),為我們提供了一種優(yōu)雅的解決方案。
工廠模式屬于創(chuàng)建型設(shè)計(jì)模式。其核心思想是:定義一個(gè)用于創(chuàng)建對(duì)象的接口(或抽象類),但將具體創(chuàng)建哪個(gè)類實(shí)例的決定推遲到子類(或具體工廠)中。這樣,客戶端代碼就不再需要直接關(guān)心具體對(duì)象的實(shí)例化細(xì)節(jié),只需與工廠接口和抽象產(chǎn)品交互,從而實(shí)現(xiàn)了創(chuàng)建邏輯與使用邏輯的解耦。
簡(jiǎn)單來說,就是將 new 這個(gè)動(dòng)作封裝起來,由一個(gè)專門的“工廠”來負(fù)責(zé)生產(chǎn)“產(chǎn)品”。
工廠模式主要分為三種形態(tài):簡(jiǎn)單工廠模式、工廠方法模式和抽象工廠模式。它們層層遞進(jìn),應(yīng)對(duì)不同復(fù)雜度的場(chǎng)景。
1. 簡(jiǎn)單工廠模式(Simple Factory)
簡(jiǎn)單工廠模式并不屬于GoF的23種設(shè)計(jì)模式,但它是理解工廠模式的基礎(chǔ)。它通過一個(gè)單獨(dú)的工廠類,根據(jù)傳入的參數(shù),動(dòng)態(tài)決定創(chuàng)建哪一種產(chǎn)品類的實(shí)例。
if-else 或 switch 分支),這違反了“開閉原則”。示例:一個(gè)圖形繪制程序,根據(jù)傳入的“圓形”、“矩形”等字符串,創(chuàng)建對(duì)應(yīng)的 Circle 或 Rectangle 對(duì)象。
2. 工廠方法模式(Factory Method)
這是工廠模式的標(biāo)準(zhǔn)形態(tài)。它定義了一個(gè)創(chuàng)建對(duì)象的抽象方法,由子類決定實(shí)例化的具體類。工廠方法模式將對(duì)象的實(shí)例化推遲到子類。
示例:日志記錄器框架。定義 Logger 抽象產(chǎn)品和 LoggerFactory 抽象工廠。可以有 FileLoggerFactory 生產(chǎn) FileLogger,DatabaseLoggerFactory 生產(chǎn) DatabaseLogger。客戶端通過 LoggerFactory 接口獲取日志器,不關(guān)心具體的實(shí)現(xiàn)。
3. 抽象工廠模式(Abstract Factory)
抽象工廠模式提供了一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定它們具體的類。它處理的是“產(chǎn)品族”的創(chuàng)建。
示例:跨平臺(tái)GUI工具包。有 Button 和 Checkbox 兩個(gè)抽象產(chǎn)品。WinFactory 能創(chuàng)建 WinButton 和 WinCheckbox,MacFactory 能創(chuàng)建 MacButton 和 MacCheckbox。應(yīng)用程序只需綁定一個(gè)具體工廠(如 MacFactory),就能獲得風(fēng)格一致的一整套UI組件。
在實(shí)踐中,選擇哪種工廠模式取決于業(yè)務(wù)的復(fù)雜度:
###
工廠模式不僅僅是“不要用 new”的教條,其背后蘊(yùn)含的是依賴倒置和面向接口編程的深刻思想。它通過將具體類的實(shí)例化延遲,賦予了程序更大的靈活性和可擴(kuò)展性,是構(gòu)建高內(nèi)聚、低耦合軟件系統(tǒng)的利器。理解并善用工廠模式,是邁向高級(jí)軟件工程師的重要一步。
如若轉(zhuǎn)載,請(qǐng)注明出處:http://www.24bl.cn/product/51.html
更新時(shí)間:2026-01-07 21:09:43
PRODUCT