cover

Bridge 模式:抽象與實作各自演進

Bridge 模式用組合取代繼承,讓抽象層與實作層可以獨立變化。

classDiagram
    class Payment {
        <<Abstraction>>
        -processor : PaymentProcessor
        +process(amount)* Result
    }
    class OnlinePayment {
        +process(amount) Result
    }
    class PaymentProcessor {
        <<Implementation>>
        +processPayment(amount)* Result
    }
    class CreditCardProcessor {
        +processPayment(amount) Result
    }
    Payment <|-- OnlinePayment
    PaymentProcessor <|-- CreditCardProcessor
    Payment o-- PaymentProcessor : 橋接

使用情境

  1. 支付系統:付款流程與付款處理器分離。
  2. 跨平台 UI:UI 抽象與平台實作分離。
  3. 設備驅動:設備抽象與驅動實作分離。

實作範例

Bridge 模式:抽象與實作透過橋樑自由組合

class PaymentProcessor {
  async processPayment(amount) {
    throw new Error('processPayment must be implemented');
  }
}
 
class CreditCardProcessor extends PaymentProcessor {
  async processPayment(amount) {
    await new Promise(resolve => setTimeout(resolve, 100));
    console.log(`信用卡處理: $${amount}`);
    return { success: true, method: 'credit_card', amount };
  }
}
 
class Payment {
  constructor(processor) {
    this.processor = processor;
  }
 
  async process(amount) {
    throw new Error('process must be implemented');
  }
}
 
class OnlinePayment extends Payment {
  async process(amount) {
    const result = await this.processor.processPayment(amount);
    return result;
  }
}
 
const onlinePayment = new OnlinePayment(new CreditCardProcessor());
onlinePayment.process(100);

優點

  • 抽象/實作分離
  • 擴充彈性高

缺點

  • 結構較複雜

延伸閱讀