工廠方法模式 (Factory Method Pattern)

什麼是工廠方法模式? 工廠方法模式定義了一個建立物件的介面,但讓子類別決定要實例化哪個類別。這種模式將物件的建立延遲到子類別,符合開放封閉原則。 核心概念 抽象工廠介面:定義建立物件的抽象方法 具體工廠類別:每個產品都有自己的工廠 開放封閉原則:新增產品時不需要修改現有程式碼 實際範例 // 產品介面 interface Vehicle { drive(): void; } // 具體產品 class Car implements Vehicle { drive(): void { console.log('Driving a car'); } } class Bike implements Vehicle { drive(): void { console.log('Riding a bike'); } } // 抽象工廠介面 interface VehicleFactory { create(): Vehicle; } // 具體工廠類別 class CarFactory implements VehicleFactory { create(): Vehicle { return new Car(); } } class BikeFactory implements VehicleFactory { create(): Vehicle { return new Bike(); } } // 使用方式 const carFactory = new CarFactory(); const bikeFactory = new BikeFactory(); const car = carFactory....

July 10, 2025 · 1 分鐘 · Rhan0

抽象工廠模式 (Abstract Factory Pattern)

什麼是抽象工廠模式? 抽象工廠模式提供一個建立一系列相關或相互依賴物件的介面,而不需要指定它們的具體類別。這種模式確保產品族內的一致性,常用於 UI 框架的實作。 核心概念 產品族:一系列相關的產品 抽象工廠介面:定義建立產品族的方法 具體工廠:實作特定產品族的建立邏輯 產品一致性:確保同一產品族內的產品能正常配合 實際範例 // 產品介面 interface Button { render(): void; } interface Input { render(): void; } // Material UI 產品族 class MaterialButton implements Button { render(): void { console.log('Rendering Material UI button'); } } class MaterialInput implements Input { render(): void { console.log('Rendering Material UI input'); } } // Bootstrap 產品族 class BootstrapButton implements Button { render(): void { console.log('Rendering Bootstrap button'); } } class BootstrapInput implements Input { render(): void { console....

July 10, 2025 · 1 分鐘 · Rhan0

簡單工廠模式 (Simple Factory Pattern)

什麼是簡單工廠模式? 簡單工廠模式是最基本的工廠模式,它提供一個統一的介面來建立物件,而不需要直接使用 new 關鍵字。這種模式將物件的建立邏輯集中管理,提高了程式碼的可維護性。 核心概念 統一介面:提供一個靜態方法來建立物件 集中管理:將建立邏輯集中在一個地方 降低耦合:客戶端不需要知道具體的實作細節 實際範例 // 產品介面 interface Vehicle { drive(): void; } // 具體產品 class Car implements Vehicle { drive(): void { console.log('Driving a car'); } } class Bike implements Vehicle { drive(): void { console.log('Riding a bike'); } } // 簡單工廠 class VehicleFactory { static create(type: 'car' | 'bike'): Vehicle { switch (type) { case 'car': return new Car(); case 'bike': return new Bike(); default: throw new Error('Unknown vehicle type'); } } } // 使用方式 const car = VehicleFactory....

July 10, 2025 · 1 分鐘 · Rhan0