"原本網站不能動,但要加上區塊鏈功能!"
週一早上的緊急會議,會議室裡瀰漫著一股不安的氣氛。IT 部經理小張一臉疲憊地站在投影機前,螢幕上顯示著密密麻麻的系統架構圖。
「各位,我要宣布一個壞消息...」小張清了清嗓子,「我們的核心業務系統是 10 年前用 Java 寫的,文件已經失傳,原開發團隊也都離職了...」
全場一片寂靜,連老闆都停止了喝咖啡的動作。
「更糟的是,」小張繼續說道,「這個系統還跟我們的財務系統、客戶管理系統、庫存系統緊密耦合。如果要重寫,至少需要兩年時間和一千萬預算...」
此時老闆突然站起來,眼神發亮:「等等!我昨天去區塊鏈大會,學到了一個革命性的概念!」
所有人的心都沈了下去。經驗告訴大家,老闆的「革命性概念」通常意味著更多的加班。
「我們不需要重寫系統!」老闆在白板上畫了一個奇怪的圖形,「我們要做一個『時空橋樑』!讓舊系統可以跟新技術對話!」
工程師阿明困惑地問:「時空橋樑?」
「對!就像手機轉接頭一樣!」老闆越說越興奮,「舊系統用舊介面,新功能用新介面,中間放一個轉換器!我們的區塊鏈錢包要能跟十年前的支付系統完美配合!」
此時你突然領悟到,老闆並沒有在胡說八道,而是在直覺地描述 Adapter Pattern 的精髓 - 讓不相容的介面能夠協同工作。
老闆最後總結:「我們要成為『系統翻譯專家』!不管多古老的系統,都要能跟最新的技術無縫整合!」
Adapter Pattern(適配器模式)是結構型設計模式中的外交官,它的核心思想是:將一個類別的介面轉換成客戶端期望的另一個介面,讓原本不相容的類別能夠協同工作。
在我們的職場災難中,老闆的系統整合需求完美地展現了為什麼需要 Adapter Pattern:
Adapter Pattern 適用於以下情境:
Adapter Pattern 的優勢:
讓我們來實作一個簡化的「新舊系統橋樑」,展示 Adapter Pattern 的核心概念:
// 舊系統 - 10年前的支付系統
class LegacyPaymentSystem {
processPayment(accountNumber: string, amount: number): string {
console.log(`[舊系統] 處理支付: ${accountNumber} - $${amount}`);
return `OLD_TXN_${Date.now()}`;
}
}
// 新系統期望的介面
interface ModernPaymentInterface {
pay(userId: string, amount: number): boolean;
}
// 新技術 - 區塊鏈支付
class BlockchainWallet {
createTransaction(address: string, amount: number): string {
console.log(`[區塊鏈] 支付: ${address} - ${amount} ETH`);
return `0x${Math.random().toString(16).substr(2, 8)}`;
}
}
// Adapter Pattern 核心 - 適配器
class PaymentAdapter implements ModernPaymentInterface {
constructor(
private legacySystem: LegacyPaymentSystem,
private blockchain: BlockchainWallet
) {}
pay(userId: string, amount: number): boolean {
// 轉換格式並呼叫舊系統
const accountNumber = `ACC_${userId}`;
const txId = this.legacySystem.processPayment(accountNumber, amount);
// 同時支援區塊鏈支付
this.blockchain.createTransaction(`0x${userId}`, amount * 0.001);
return txId.length > 0;
}
}
// 使用範例
const legacySystem = new LegacyPaymentSystem();
const blockchain = new BlockchainWallet();
const adapter = new PaymentAdapter(legacySystem, blockchain);
// 現代化的使用方式
adapter.pay("user123", 1000);
// 輸出:
// [舊系統] 處理支付: ACC_user123 - $1000
// [區塊鏈] 支付: 0xuser123 - 1 ETH
適配器設計原則:
與老闆溝通策略:
技術實作要點:
團隊協作建議:
Decorator Pattern - 功能收集狂,探討老闆的新挑戰:「按鈕很棒,但能不能加個動畫?加個音效?加個震動?加個香味?」
準備迎接老闆的功能蒐集癖和無限包裝的藝術吧!