當前位置:
首頁 >
设计模式 之 适配器模式
發布時間:2025/6/15
55
豆豆
生活随笔
收集整理的這篇文章主要介紹了
设计模式 之 适配器模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目的
將一個類的接口轉換為另一個符合客戶期望的接口
達到的目的:
種類
有兩種:
- 對象適配器
- [ ] 類適配器(嗷~~暫時沒有實際場景讓自己完全明白嗷?)
- NOTE: 對象適配器和類適配器使用兩種不同的適配方法(分別是組合委托和繼承)
舉個例子
我這里就拿使用三腳插頭充電的蘋果手機(港版充電器)來舉個例子吧~和圖中例子相反
- 在線測試
對號入座
Java中的適配器
客戶使用適配器的過程解析:
- 或許結合這一段代碼就可以更加理解適配器模式使用的場景
思考 ?
- 我所認為的適配器模式應該盡量不去修改被適配者。
- 真正想做的是應該是接口的轉換。
優點
對象適配器模式優點:
(1) 一個對象適配器可以把多個不同的適配者適配到同一個目標;
(2) 將目標類和被適配者類解耦,通過引入一個適配器類來重用現有的被適配者類,無須修改原有結構。
缺點
過多的使用適配器,會讓系統非常零亂,不易整體進行把握。比如,明明看到調用的是 A 接口,其實內部被適配成了 B 接口的實現.
適配器模式 VS 外觀模式
先看下面這段熟悉的代碼~~ 摘自 @遠峰
// 統一的接口適配不同類 // Target 客戶期望使用的接口 interface ComputerInterface {usb(): void; }// Adaptee class HuaweiPhone {huaweiInterface(): void {console.log('華為手機的數據接口');} }// Adaptee class Iphone {iphoneInterface(): void {console.log('蘋果手機的數據接口');} }// Class Adapter class HuaweiDataWireAdapter extends HuaweiPhone implements ComputerInterface {usb(): void {console.log('使用華為數據線連接');super.huaweiInterface();} }class IphoneDataWireAdapter extends Iphone implements ComputerInterface {usb(): void {console.log('使用蘋果數據線連接');super.iphoneInterface();} }function commonAdapterDemo() {const computer1 = new HuaweiDataWireAdapter();computer1.usb();const computer2 = new IphoneDataWireAdapter();computer2.usb();} commonAdapterDemo();- 有些誤解就是一個適配器只用來適配一個類,但其實適配器模式也可以包裝多個類。
- 這個例子就是一個類適配器的應用。客戶期望使用他們自己的數據線連接 ~.usb(),然后通過適配器做了一個轉換,事實上沒有說將華為手機和蘋果手機的數據線接口給重新設計了~
- [ ] 相類似的是外觀模式,還沒思考(? 狗帶了)
NOTE: 外觀和適配器模式都可以包裝許多類,但是外觀模式是為了簡化操作,而適配器模式是將接口轉換為不同接口
Q & A
- 一個適配器需要做多少“適配”工作?
適配器做的工作和目標接口的大小成正比
參考資料
- Head First 設計模式
- 原文鏈接
總結
以上是生活随笔為你收集整理的设计模式 之 适配器模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows+sublime text
- 下一篇: ASP.NET处理架构