設計模式是針對軟體設計中常見挑戰的既定解決方案。透過利用它們,開發人員可以增強程式碼的可讀性、可擴展性和可維護性。本文探討了 TypeScript(一種日益流行的 JavaScript 超集)如何透過其型別安全性和現代功能來改進這些模式。無論您是在開發大型應用程式還是業餘項目,掌握 TypeScript 中的設計模式都將提升您的開發技能。
設計模式是針對軟體設計中常見挑戰的可重複使用的通用解決方案。它們不是實際的程式碼,而是用來解決這些問題的模板。這些模式源自《四人幫》(GoF) 一書,分為三大類:
TypeScript 的功能讓設計模式的實現更加健壯:
1。靜態類型: 在編譯時捕捉錯誤,減少執行時間錯誤。
2.介面和泛型: 允許更精確和靈活的實作。
3.枚舉和聯合類型: 簡化某些模式,例如狀態管理。
4.增強的工具:借助 IDE 支持,TypeScript 提高了工作效率。
確保一個類別只有一個實例並提供對其的全域存取點。
TypeScript 中的實作:
class Singleton { private static instance: Singleton; private constructor() {} // Prevent instantiation public static getInstance(): Singleton { if (!Singleton.instance) { Singleton.instance = new Singleton(); } return Singleton.instance; } } const instance1 = Singleton.getInstance(); const instance2 = Singleton.getInstance(); console.log(instance1 === instance2); // true
使用案例:管理設定設定或資料庫連線。
提供用於建立物件的接口,而無需指定其確切的類別。
實作:
interface Button { render(): void; } class WindowsButton implements Button { render() { console.log("Rendering Windows button"); } } class MacButton implements Button { render() { console.log("Rendering Mac button"); } } class ButtonFactory { static createButton(os: string): Button { if (os === "Windows") return new WindowsButton(); if (os === "Mac") return new MacButton(); throw new Error("Unknown OS"); } } const button = ButtonFactory.createButton("Mac"); button.render(); // Output: Rendering Mac button
使用案例:跨平台應用程式的 UI 框架。
定義一對多關係,其中一個物件的變更會通知其所有依賴項。
實作:
class Subject { private observers: Array<() => void> = []; addObserver(observer: () => void) { this.observers.push(observer); } notifyObservers() { this.observers.forEach(observer => observer()); } } const subject = new Subject(); subject.addObserver(() => console.log("Observer 1 notified!")); subject.addObserver(() => console.log("Observer 2 notified!")); subject.notifyObservers();
用例: Angular 或 React 等前端框架中的反應性。
定義一系列演算法,封裝每個演算法,並使它們可以互換。
實作:
interface PaymentStrategy { pay(amount: number): void; } class CreditCardPayment implements PaymentStrategy { pay(amount: number) { console.log(`Paid ${amount} using Credit Card`); } } class PayPalPayment implements PaymentStrategy { pay(amount: number) { console.log(`Paid ${amount} using PayPal`); } } class PaymentContext { constructor(private strategy: PaymentStrategy) {} executePayment(amount: number) { this.strategy.pay(amount); } } const payment = new PaymentContext(new PayPalPayment()); payment.executePayment(100); // Paid 100 using PayPal
用例:電子商務平台中的支付系統。
動態地為物件新增功能。
實作:
class Singleton { private static instance: Singleton; private constructor() {} // Prevent instantiation public static getInstance(): Singleton { if (!Singleton.instance) { Singleton.instance = new Singleton(); } return Singleton.instance; } } const instance1 = Singleton.getInstance(); const instance2 = Singleton.getInstance(); console.log(instance1 === instance2); // true
用例:為購物車中的產品添加功能。
Pattern | Category | Use Case | Benefit |
---|---|---|---|
Singleton | Creational | Managing global state like configurations | Guarantees single instance |
Factory | Creational | UI components or APIs | Decouples creation logic |
Observer | Behavioral | Event systems in frameworks | Simplifies communication |
Strategy | Behavioral | Algorithm selection in runtime | Enhances flexibility |
Decorator | Structural | Extending class functionality | Adds dynamic capabilities |
用例
重構模式
作者:
下一篇文章見,小伙子! ?
以上是利用 JavaScript 進行函數式編程的詳細內容。更多資訊請關注PHP中文網其他相關文章!