目錄導航
- 適配器模式及其作用
- 現實生活舉例
- 適配器模式的好處
- 適配器模式的實現
- 關系圖
- 實現步驟
- 適配器模式的適用場景
- 適配器模式示例
適配器模式及其作用
適配器模式是一種結構型設計模式。所謂結構型是指在代碼結構方面的設計模式。適配器模式作為中間層,可以讓交互接口不兼容的兩個類或模塊間正常交互協作。雙方只面向適配器工作,無需關心適配器的另一端是誰及其工作方式。
現實生活舉例
蘋果電腦是沒有USB插孔的,如果想要連接USB插頭的設備,必須使用適配器。對于蘋果電腦來說,與滿足自身接口協議的適配器交互,不知道也不關心在適配器的另一端的設備的交互協議是怎樣的。對于USB設備來說,只與適配器的USB插口交互,同樣也不關心另一端的情況。
適配器模式的好處
- 可以讓接口不兼容的兩個模塊交互。當交互的雙方接口不兼容時,如果不愿修改已有代碼的功能,因為變更意味著風險,可能引入bug,另外,有可能根本沒有權限修改,比如一方是第三方類庫。此時使用適配器模式,可以讓雙方無縫對接。
- 單一職責。交互的雙方專注于自己的主責,將交互設計與數據轉換分離到Adapter中。
適配器模式的實現
關系圖
交互主動方稱為Client,交互被動方稱為Service。
實現步驟
- 根據交互主動方Client所要求的交互方式和數據格式,聲明Adapter接口,定義一組交互方法。
- 定義一個Adapter類,內部持有一個Service對象,所有的交互方法基于Service的功能實現。
- Client內部持有一個成員變量,類型為Adapter接口類型,可接收任何遵循Adapter接口的對象。
- 當不同的Service想提供服務時,創建新的Adapter接口實現類,基于該Service,遵循Adapter接口實現服務功能。
適配器模式的適用場景
- 想要接口不兼容的兩方交互,而不用修改兩方的代碼。可以使用適配器作為中間者,建立溝通的橋梁
- 設計一個工具類或功能模塊,根本無法預知交互方的交互方式及數據格式,但自身的工作流程及依賴功能已知,此時可將依賴的功能抽象成適配器接口,完成自己的實現。想要與之溝通的類或模塊,創建遵循該適配器接口的適配器,提供相應功能。
適配器模式示例
Android中,RecyclerView便使用了適配器模式。RecyclerView作為UI組件,只負責展示數據,至于數據的來源,獲取方式(如數據庫、網絡、內存),完全不關心,也無法預知。所以定義了獲取數據的Adapter接口,想要為Recycler提供數據,需定義一個類,實現Adapter接口,提供展示的數據。