# Java實踐之適配器模式的示例分析
## 目錄
1. [適配器模式概述](#適配器模式概述)
2. [模式結構與角色分析](#模式結構與角色分析)
3. [Java實現方式對比](#java實現方式對比)
4. [實戰案例:支付系統集成](#實戰案例支付系統集成)
5. [Spring框架中的適配器應用](#spring框架中的適配器應用)
6. [模式優缺點深度剖析](#模式優缺點深度剖析)
7. [與其他模式的對比](#與其他模式的對比)
8. [最佳實踐與注意事項](#最佳實踐與注意事項)
9. [完整代碼示例](#完整代碼示例)
10. [總結與展望](#總結與展望)
---
## 適配器模式概述
適配器模式(Adapter Pattern)是結構型設計模式中的經典模式,主要解決接口不兼容問題。其核心思想如同現實世界的電源適配器,在兩個不匹配的接口之間建立橋梁。
### 設計意圖
- 允許原本因接口不兼容而無法協同工作的類可以一起工作
- 提高代碼復用性,特別是對遺留系統的整合
- 遵循開閉原則,避免修改現有接口
### 典型應用場景
1. 系統升級時整合舊版接口
2. 使用第三方庫時接口規范不一致
3. 需要統一多個相似功能但接口不同的類

---
## 模式結構與角色分析
### 類適配器(繼承實現)
```java
// 目標接口
public interface Target {
void request();
}
// 被適配者
public class Adaptee {
public void specificRequest() {
System.out.println("特殊請求處理");
}
}
// 適配器
public class ClassAdapter extends Adaptee implements Target {
@Override
public void request() {
super.specificRequest();
}
}
public class ObjectAdapter implements Target {
private Adaptee adaptee;
public ObjectAdapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
adaptee.specificRequest();
}
}
| 角色 | 職責 | 對應示例 |
|---|---|---|
| Target | 定義客戶端使用的目標接口 | Target接口 |
| Adaptee | 需要被適配的現存組件 | Adaptee類 |
| Adapter | 轉換接口的適配器實現 | ClassAdapter類 |
| Client | 通過目標接口使用適配器的客戶端 | 調用Target的代碼 |
| 考量因素 | 類適配器 | 對象適配器 |
|---|---|---|
| 需要多重繼承 | 不支持 | 支持 |
| Adaptee子類化需求 | 需要 | 不需要 |
| 運行時靈活性 | 低 | 高 |
某電商平臺需要同時支持: - 支付寶支付(Alipay SDK) - 微信支付(WeChatPay SDK) - 銀聯支付(UnionPay SDK)
public interface PaymentService {
void pay(BigDecimal amount);
void refund(String orderId);
}
public class AlipayAdapter implements PaymentService {
private AlipayService alipay;
public AlipayAdapter() {
this.alipay = new AlipayService();
}
@Override
public void pay(BigDecimal amount) {
alipay.sendPayment(amount.doubleValue());
}
@Override
public void refund(String orderId) {
alipay.initiateRefund(orderId);
}
}
public class PaymentController {
private PaymentService payment;
// 通過依賴注入設置具體實現
public void setPayment(PaymentService payment) {
this.payment = payment;
}
public String checkout(BigDecimal amount) {
payment.pay(amount);
return "支付成功";
}
}
Spring MVC中處理多種控制器的關鍵組件:
// 簡化的Spring適配器接口
public interface HandlerAdapter {
boolean supports(Object handler);
ModelAndView handle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception;
}
// Controller實現示例
public class SimpleControllerAdapter implements HandlerAdapter {
@Override
public boolean supports(Object handler) {
return (handler instanceof Controller);
}
@Override
public ModelAndView handle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
return ((Controller)handler).handleRequest(request, response);
}
}
| 維度 | 適配器模式 | 裝飾器模式 |
|---|---|---|
| 目的 | 轉換接口 | 增強功能 |
| 對象創建 | 通常只包裝一個對象 | 可以遞歸嵌套 |
| 接口關系 | 不同接口間的轉換 | 保持相同接口 |
// 反模式:適配器變成全能類
public class BadAdapter implements Target {
private Adaptee adaptee;
private AnotherService service;
public void request() {
// 混雜業務邏輯
if (checkCondition()) {
adaptee.method1();
} else {
service.method2();
}
}
}
// 微信支付適配器
public class WeChatPayAdapter implements PaymentService {
private WeChatPay pay;
public WeChatPayAdapter(WeChatPay pay) {
this.pay = pay;
}
@Override
public void pay(BigDecimal amount) {
pay.weixinPay(amount.toString());
}
@Override
public void refund(String orderId) {
pay.refundOrder(orderId);
}
}
// 單元測試示例
@Test
public void testAlipayAdapter() {
PaymentService payment = new AlipayAdapter();
payment.pay(new BigDecimal("100.00"));
// 驗證支付結果...
}
適配器模式體現了”間接訪問”的設計哲學,通過增加中間層來解決接口不兼容問題,是”分而治之”思想的具體實踐。
“適配器模式的價值不僅在于解決眼前的問題,更在于它為系統演進提供了緩沖空間。” ——《設計模式精解》 “`
(注:實際文檔中應包含更詳細的代碼注釋、序列圖示例和性能測試數據。本文檔結構完整展示約3000字內容,完整版需擴展各章節的深度分析和更多實踐案例。)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。