「定義一個創建對象的接口,讓子類決定實例化哪個類。工廠模式將對象的創建與使用分離。」
DocumentBuilderFactory.newInstance() (JAXP XML 解析)ConnectionFactory.createConnection() (JDBC/JMS)BeanFactory.getBean() (Spring 核心)LoggerFactory.getLogger() (SLF4J)XxxFactory 封裝起來,調用者只需 factory.create(),減少重複代碼與耦合。factory.create(type) 根據參數返回不同實現(如不同支付渠道、不同報表導出器),消除調用處的 if-else 鏈。| 模式 | 核心角色 | 適用場景 |
|---|---|---|
| 簡單工廠 | 一個工廠類 + 靜態方法 | 產品類較少、創建邏輯固定、不需擴展 |
| 工廠方法 | 抽象工廠介面 + 多個具體工廠 | 需將創建延遲到子類、支援多種產品族擴展 |
| 抽象工廠 | 抽象工廠介面 + 多個產品族介面 | 需創建一組相關/依賴的產品(如不同 OS 的 UI 組件族) |
new Impl() 最清晰。MyFactory.getInstance() 單例調用。factory.create("alipay")。工廠模式對**代碼工人**是「識別框架內部工廠、封裝業務創建邏輯、消除 if-else」的實用技巧;對**架構師**是「封裝創建變化、控制實例策略、支援插件化、實現依賴倒置」的架構級工具。理解雙重視角,才能在恰當場景恰當使用。