【设计模式】适配器模式 ( 概念 | 适用场景 | 优缺点 | 外观模式对比 | 适配器模式相关角色 | 类适配器 | 对象适配器 | 实现流程 )
文章目錄
- I . 適配器模式概念
- II . 適配器模式 適用場景
- III . 適配器模式 優(yōu)缺點
- IV . 適配器模式 與 外觀模式對比
- V . 適配器模式 相關角色 ( 重點 )
- VI . 適配器模式 ( 類適配器 ) 代碼實現(xiàn)流程 ( 重點 )
- VII . 適配器模式 ( 對象適配器 ) 代碼實現(xiàn)流程 ( 重點 )
I . 適配器模式概念
適配器模式 :
① 設計模式類型 : 結構型 ;
② 概念 : 將 類的接口 轉換成用戶可以調(diào)用的 另外一個接口 ;
③ 目的 : 使接口不兼容的兩個類可以一起工作 ;
④ 概念中的三個角色 : 被適配者 ( 現(xiàn)有的功能類 ) , 用戶目標接口 ( 用戶調(diào)用的接口 ) , 適配器類 ( 用戶通過調(diào)用該類 , 間接調(diào)用 被適配者類 ) ;
⑤ 簡易原理 : 適配器類 實現(xiàn)用戶目標接口 , 在該接口的實現(xiàn)類中調(diào)用被適配者 , 實現(xiàn)了接口轉接的效果 ; 使用的時候 , 通過創(chuàng)建適配器類 , 即可間接調(diào)用被適配者方法 ;
II . 適配器模式 適用場景
1 . 功能正確但接口不匹配 : 對于之前開發(fā)好的類 , 該類的操作和返回值都是正確的 , 但是其定義的方法接口無法調(diào)用 , 此時使用適配器模式 , 使該類與用戶的接口匹配 , 讓用戶使用適配器的接口 , 間接調(diào)用該類 ;
2 . 適配器模式使用階段 : 軟件設計開發(fā)階段一般不使用適配器模式 , 在軟件維護時 , 出現(xiàn)操作和返回值類似 , 但是函數(shù)接口不同 , 為了適配第三方系統(tǒng)的接口 , 使用適配器模式 ;
設計階段不要使用適配器模式 ;
3 . 適配器的兩種實現(xiàn)方式 : 對象適配器模式 與 類適配器 ;
① 對象適配器 : 符合組合復用原則 , 使用了委托機制 ; ( 通過組合實現(xiàn) , 適配器類中維護被適配者成員 )
② 類適配器 : 通過類的繼承實現(xiàn)適配器模式 ; ( 通過繼承實現(xiàn) , 適配器類繼承被適配者類 )
推薦使用對象適配器模式 , 在繼承與組合二者之間 , 優(yōu)先選擇組合方案 ;
III . 適配器模式 優(yōu)缺點
1 . 適配器模式 優(yōu)點 :
① 復用且不修改類 : 不改變現(xiàn)有類的基礎上 , 提高類的復用性 , 透明性 ; 讓現(xiàn)有類與目標類接口匹配 ;
② 降低耦合 : 目標類 ( 用戶調(diào)用的接口所在類 ) 和 現(xiàn)有類 ( 被適配者 ) 解除耦合 , 降低了系統(tǒng)的耦合性 , 易于擴展維護 ;
③ 符合開閉原則 : 用戶調(diào)用適配器接口 , 只與適配器類進行交互 , 如果需要修改擴展 , 只需要修改適配器類即可 , 目標類 和 現(xiàn)有類 各自都是相互獨立的 , 互不影響 ;
2 . 適配器模式 優(yōu)點 :
① 增加復雜性 : 編寫適配器類時 , 需要考慮全面 , 包括被適配者 和 目標類 , 系統(tǒng)復雜性會增加 ;
② 降低可讀性 : 系統(tǒng)代碼可讀性降低 , 可維護性降低 ;
閱讀代碼時 , 調(diào)用系統(tǒng)接口 , 如果調(diào)用的是適配器接口 , 還要到處找調(diào)用的是哪個現(xiàn)有類的實際接口 ;
IV . 適配器模式 與 外觀模式對比
1 . 相同點 : 都是對現(xiàn)有類進行封裝 ;
2 . 行為分析 :
① 外觀模式行為 : 外觀模式定義了新街口 , 處理多個子系統(tǒng)之間的交互 ;
② 適配器模式行為 : 適配器模式復用原有接口 , 只是簡單的轉接了一下 , 使兩個現(xiàn)存接口 ( 現(xiàn)有類 和 目標類 ) 協(xié)同工作 ;
3 . 適配力度分析 :
① 外觀模式 : 適配力度很大 , 需要開發(fā)整個子系統(tǒng)之間的交互流程 ;
② 適配器模式 : 修改很少的內(nèi)容 , 只是進行簡單的接口轉接交互 , 一般不實現(xiàn)具體的功能 ;
V . 適配器模式 相關角色 ( 重點 )
1 . 被適配者 : 實際功能提供者 , 是系統(tǒng)中原有的類 ;
2 . 用戶目標接口 : 用戶調(diào)用該接口 , 實現(xiàn)功能操作 ; 是適配器的父類接口 ;
3 . 適配器 : 需要實現(xiàn) 用戶目標接口 , 并在接口中的操作中 , 調(diào)用被適配者提供的實際功能 ; 適配器有兩種途徑實現(xiàn) , 分別是類適配器 , 對象適配器 ;
① 類適配器 : 繼承被適配者 , 通過 super 訪問被適配者方法 ;
② 對象適配器 ( 推薦 ) : 在適配器中維護一個被適配者成員變量 , 通過成員變量訪問被適配者方法 ;
VI . 適配器模式 ( 類適配器 ) 代碼實現(xiàn)流程 ( 重點 )
1 . 明確被適配者 : 被適配者 是一個現(xiàn)有類 , 該類保持不變 ;
2 . 定義用戶目標接口 : 用戶通過調(diào)用該接口 , 實現(xiàn)實際的功能 , 該功能與適配者中的功能類似 , 但 接口不同 ;
3 . 聲明適配器 ( 類適配器 ) :
① 適配器 實現(xiàn) 用戶目標接口 : 適配器 需要實現(xiàn) 用戶目標接口 , 在實現(xiàn)的接口方法中 , 需要將實際操作 委托給 被適配者 ;
② 適配器 繼承 被適配者 : 如何調(diào)用到 被適配者 的方法呢 , 這里 適配器 通過 繼承 被適配者 , 獲取調(diào)用 被適配者 方法的資格 ;
③ 委托操作 : 在實現(xiàn)的 用戶目標接口中 , 通過 super 關鍵字 , 調(diào)用 被適配者 的方法實現(xiàn)具體功能 ;
類適配器 與 對象適配器 , 本質(zhì)區(qū)別就是 適配器類訪問 被適配者的途徑 ;
類適配器 : 通過繼承 被適配器 , 獲取訪問被適配器方法的資格 ;
對象適配器 : 通過在其內(nèi)部維護一個 被適配者 成員變量 , 進而通過該成員變量訪問 被適配者方法 ;
4 . 用戶訪問操作 :
① 定義目標接口變量 : 定義 用戶目標接口 對象變量 ;
② 目標接口變量賦值 : 創(chuàng)建 適配器對象 賦值給上述 用戶目標接口對象變量 , ( 適配器 是 用戶目標接口 的子類 ) ;
③ 目標接口調(diào)用 : 調(diào)用用戶目標接口 , 即可調(diào)用被適配者的實際功能方法 ;
VII . 適配器模式 ( 對象適配器 ) 代碼實現(xiàn)流程 ( 重點 )
1 . 明確被適配者 : 被適配者 是一個現(xiàn)有類 , 該類保持不變 ;
2 . 定義用戶目標接口 : 用戶通過調(diào)用該接口 , 實現(xiàn)實際的功能 , 該功能與適配者中的功能類似 , 但 接口不同 ;
3 . 聲明適配器 :
① 適配器 實現(xiàn) 用戶目標接口 : 適配器 需要實現(xiàn) 用戶目標接口 , 在實現(xiàn)的接口方法中 , 需要將實際操作 委托給 被適配者 ;
② 適配器 維護 被適配者 類型成員變量 : 如何調(diào)用到 被適配者 的方法呢 , 這里 適配器 通過 定義 被適配者 類型的成員變量 , 通過該 被適配者 類型成員變量 , 調(diào)用 被適配者 public 方法 ;
③ 委托操作 : 在實現(xiàn)的 用戶目標接口中 , 通過 被適配者類型 成員變量 , 調(diào)用 被適配者 的方法實現(xiàn)具體功能 ;
類適配器 與 對象適配器 , 本質(zhì)區(qū)別就是 適配器類訪問 被適配者的途徑 ;
類適配器 : 通過繼承 被適配器 , 獲取訪問被適配器方法的資格 ;
對象適配器 : 通過在其內(nèi)部維護一個 被適配者 成員變量 , 進而通過該成員變量訪問 被適配者方法 ;
4 . 用戶訪問操作 :
① 定義目標接口變量 : 定義 用戶目標接口 對象變量 ;
② 目標接口變量賦值 : 創(chuàng)建 適配器對象 賦值給上述 用戶目標接口對象變量 , ( 適配器 是 用戶目標接口 的子類 ) ;
③ 目標接口調(diào)用 : 調(diào)用用戶目標接口 , 即可調(diào)用被適配者的實際功能方法 ;
總結
以上是生活随笔為你收集整理的【设计模式】适配器模式 ( 概念 | 适用场景 | 优缺点 | 外观模式对比 | 适配器模式相关角色 | 类适配器 | 对象适配器 | 实现流程 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【设计模式】装饰者模式 ( 概念 | 适
- 下一篇: 【设计模式】适配器模式 ( 类适配器代码