介面卡和外觀模式.
一、介面卡模式
1、概念
- 定義:將一個類的介面,轉換成客戶期望的另一個類的介面,介面卡讓原本介面不相容的類可以合作無間。
- 安卓轉Type-C頭,就是一個典型的介面卡模式。在安卓頭和 Type-C 之間引入介面卡,安卓頭是被適配者。
- 解析:
1、 客戶(Client)通過目標介面(Target Interface)呼叫介面卡(Adapter)的方法對介面卡發出請求。
2、 介面卡使用被介面卡介面(Adaptee Interface)把請求轉換成被適配者的一個或多個呼叫介面。
3、 客戶接收到呼叫的結果,但並未察覺這一切是介面卡在起轉換作用。
- 結構:介面卡有兩種,分別是類介面卡和物件介面卡。類介面卡採用多重繼承實現,在 Java 中不適用;物件介面卡採用繼承和組合實現。以下是兩種結構的類圖:
2、Demo 實現
在 JDK1.0 時我們用的集合還是 Vector(後來推薦使用 ArrayList),我們用的迭代器還是 Enumeration(後來推薦使用 Iterator)。現在我們想寫一個介面卡,讓 Vector 也能使用 Iterator 迭代器,即在 Enumeration 和 Iterator 之間做適配。
/** * 1、Iterator 是目標(Target)介面角色。 * 2、Enumeration 是被適配者(Apaptee)角色。 * 3、EnumerationAdapter 是適配者(Adapter)角色。 */ public class EnumerationAdapter implements Iterator { private Enumeration enumeration; public EnumerationAdapter(Enumeration enumeration) { this.enumeration = enumeration; } @Override public boolean hasNext() { return enumeration.hasMoreElements(); } @Override public Object next() { return enumeration.nextElement(); } @Override public void remove() { throw new UnsupportedOperationException("remove"); } }
public static void main(String[] args) { Vector vector = new Vector(); vector.add("java"); vector.add("python"); vector.add("javaScript"); Enumeration enumeration = vector.elements(); Iterator iterator = new EnumerationAdapter(enumeration); while (iterator.hasNext()) { System.out.println(iterator.next()); } }
3、總結
- 應用場景:系統需要使用一些現有的類,而這些類的介面不符合系統的需要,甚至沒有這些類的原始碼。
- 優點:
1、將介面轉化成客戶真正能接受的介面,為不用的介面之間做適配。
2、客戶和被適配者之間是解耦的。倘若一段時間之後,我們想要改變介面,介面卡可以將改變的部分封裝起來,而客戶不用做任何的改變。另外,被適配者的任何子類,都可以搭配著介面卡使用。
- 缺點:
1、一次最多隻能適配一個適配者類,不能同時適配多個適配者。
2、目標抽象類只能為介面,不能為類,其使用有一定的侷限性。
二、外觀模式
- 外觀(Facade)模式:提供了一個統一的介面,用來訪問子系統中的一群介面。外觀定義了一個高層介面,讓子系統更容易使用。
- 外觀模式說是設計模式中最簡單的模式也不為過,因為它沒有那麼多複雜的角色,它的工作只有一個 —— 簡化介面。它可能持有一個或者數個類物件的組合,然後將它們複雜的一切(實現、執行順序等)隱藏在身後,只露出一個乾淨美好的外觀。
- 外觀模式不只是簡化了介面,也將客戶從元件的子系統中解耦。
- 外觀模式提供簡化介面的同時,依然將系統完整的功能暴露出來,以供需要的人使用。
相關推薦
介面卡和外觀模式.
一、介面卡模式 1、概念 定義:將一個類的介面,轉換成客戶期望的另一個類的介面,介面卡讓原本介面不相容的類可以合作無間。 安卓轉Type-C頭,就是一個典型的介面卡模式。在安卓頭和 Type-C 之間引入介面卡,安卓頭是被適配者。 解析: 1、 客戶(Client)通過目標介面(Tar
Head First設計模式——介面卡和外觀模式
前言:為什麼要一次講解這兩個模式,說點騷話:因為比較簡單(*^_^*),其實是他們兩個有相似和有時候我們容易搞混概念。 講到這兩個設計模式與另外一個“裝飾者模式”也有相似,他們三個按照結構模式分類都屬於“結構性模式”,所有我們接下來就來看什麼是介面卡模式和外觀
設計模式——介面卡模式和外觀模式
介面卡模式和外觀模式 本文將分別介紹介面卡模式和外觀模式。 1、介面卡模式 1.1、定義 介面卡模式 將一個類的介面,轉換成客戶期望的另一個介面。介面卡讓原本介面不相容的類可以合作無間。 介面卡模式的定義非常易懂,就是將一個介面轉換成另一個介面,這樣一來就實現了介面的
走進設計模式的世界7:我們很像但不是一個人好嗎?-介面卡模式和外觀模式
介面卡模式: 將一個類的介面,轉接成客戶期望的另一個介面。介面卡讓原本介面不相容的類可以合作無間。 外觀模式: 提供了一個統一的介面,用來訪問子系統中的一群介面。外觀定義了一個高層介面,讓子系統更容易使用。 設計原則:最少知識原則:只和你的密友談話。 解釋:當需要使用一個現有
走進設計模式的世界6:我們很像但不是一個人好嗎?-介面卡模式和外觀模式
介面卡模式: 將一個類的介面,轉接成客戶期望的另一個介面。介面卡讓原本介面不相容的類可以合作無間。 外觀模式: 提供了一個統一的介面,用來訪問子系統中的一群介面。外觀定義了一個高層介面,讓子系統更
適配器和外觀模式
在外 適配 player 維護成本 ide volume src 成本 current 一、 基本概述 1:現實中存在三角插頭適配成雙插頭,等其他各種形式的適配器來連接不兼容的兩個物體。同理在代碼中也存在適配器模式來兼容兩個不同的代碼接口。 2:KTV包間打開一個啟動開
JavaScript設計模式(一)單例模式、組合模式和外觀模式
單例模式是指在您要確保始終只建立一個物件例項時使用的設計模式。 在面向物件的經典程式語言中,建立單例模式背後的概念多少有點讓人難以理解,因為其中包含一個同時具有靜態及非靜態屬性和方法的類。 但本文主要討論 JavaScript,因此,由於 JavaScript 是一種不包含真正類的動態語言,因此 Java
設計模式(二):適配器模式和外觀模式
mov col 出國旅遊 註意 charge err 類圖 rri 方式 適配器模式 一、出國必備適配器 隨著中國經濟的快速發展,我們也越來越有錢了。出國旅遊也不是什麽新鮮事了。泰國是中國人最愛去的旅遊地之一。當我們程序員去泰國旅遊時,可能會帶著筆記本電腦去,以便隨時可
C++外觀模式和組合模式
for 樹形結構 gif 代碼 機器 end 調用 特點 功能 外觀模式應該是用的很多的一種模式,特別是當一個系統很復雜時,系統提供給客戶的是一個簡單的對外接口,而把裏面復雜的結構都封裝了起來。客戶只需使用這些簡單接口就能使用這個系統,而不需要關註內部復雜的結構
Java進階篇設計模式之五-----外觀模式和裝飾器模式
和我 logs 適配器模式 del xtra implement () 實例化 網絡遊戲 前言 在上一篇中我們學習了結構型模式的適配器模式和橋接模式。本篇則來學習下結構型模式的外觀模式和裝飾器模式。 外觀模式 簡介 外觀模式隱藏系統的復雜性,並向客戶端提供了一個客戶端可以
《設計模式》之一文帶你理解建造者模式、模板方法、介面卡模式、外觀模式
我的github,到時上傳例子程式碼 https://github.com/tihomcode 《設計模式》之一文帶你理解單例、JDK動態代理、CGLIB動態代理、靜態代理 建造者模式 什麼是建造者模式 建造者模式:是將一個複雜的物件的構建與它的表示分離,使得
Swift 中的設計模式 #3 外觀模式與介面卡模式
作者:Andrew Jaffee,原文連結,原文日期:2018-09-04 譯者:鄭一一;校對:BigNerdCoding,pmst,Forelax;定稿:Forelax 本文是我的設計模式系列教程的第三篇。在第一篇文章中,我介紹了 建立型模式中的工廠模式和單例模式。在第二篇文章中,又討論了一下
Java設計模式之外觀模式和裝飾器模式的設計(精選)
前言 本篇來學習下結構型模式的外觀模式和裝飾器模式。 外觀模式 簡介 外觀模式隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的介面。這種型別的設計模式屬於結構型模式,它向現有的系統新增一個介面,來隱藏系統的複雜性。 簡單的來說就是對外提供一個簡單介面,
外觀模式、代理模式和中介者模式的區別
外觀模式(Facade Pattern) 定義一個外觀類,外觀類隱藏系統的複雜性,為客戶端提供簡化的方法和對現有系統類方法的委託呼叫。 例如:二手房交易的中介,屬於外觀模式。買房者通過中介可以簡單地買到二手房,中介自己把聯絡房東看房砍價、過戶、交稅這些複雜的事情都搞定了。 代理模式(Pr
單例模式,命令模式,介面卡模式,外觀模式
1.單例模式,很簡單,雙鎖 2.命令模式(用在佇列請求,執行緒池,資料庫日誌等) 經典的命令模式包括4個角色: Command:定義命令的統一介面 ConcreteCommand:Command介面的實現者,用來執行具體的命令,某些情況下可以直接用來充當Receiver。 Rec
HeadFirst 設計模式筆記(七)—— 介面卡模式與外觀模式
介面卡模式(Adapter):可以想想現實生活中的轉換插頭。介面卡是一箇中間層,能將類的介面轉換成想要的介面。這與前文中的裝飾者模式有點像,不過裝飾者模式是賦予介面新的功能,而介面卡模式則把介面轉換成需要的樣子。 我的理解比較簡單:假設我們手頭有兩個介面A和B。有一個
介面卡模式和代理模式比較專題1
介面卡說通俗點就是把一個東西包裝一下變成另外一個東西,為什麼要包裝而不直接就用這個東西呢?呵呵,如果能直接用就犯不著適配了,要適配當然就是由於某些原因你用不了當前這個東西。最容易理解的就是電器的例子,比如你在中國買的電器使用電壓是220V,結果你跑到國外去了,國外提供的電壓是110V,問題就來了,你必須使用的
介面卡模式 和 裝飾模式 個人的理解筆記
介面卡模式: interface Target{ public void request(); } class Adapter1{ public void specificRequest(){ system.out.println(" 這個是個特殊方法,要被包裝起來
15、C語言和設計模式(介面卡模式)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 現在的生活當中,我們離不開各種電子工具。什麼膝上型電腦、手機、mp4啊,都離不開充電。既然是充電,那麼就需要用到充電器。其實從根本上來說,充電器就是一個個普通
外觀模式的應用之StandardSession和StandardSessionFacade看法
最進看Session看到一個跟“外觀模式”還有“訪客模式”相關的東西,所以這裡做個記錄分享下。以下全是自己的理解,有不妥之處還請指出,共同學習進步。 書面式的介紹不說,自己去看其他的定義 外觀模式:就是為了封閉子系統內部的,但是又需要向外部開放一些東西,就可