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