java設計模式之適配器模式

2020-12-16 路人與貓

適配器模式(Adapter Pattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬於結構型模式,它結合了兩個獨立接口的功能。

這種模式涉及到一個單一的類,該類負責加入獨立的或不兼容的接口功能。舉個真實的例子,讀卡器是作為內存卡和筆記本之間的適配器。您將內存卡插入讀卡器,再將讀卡器插入筆記本,這樣就可以通過筆記本來讀取內存卡。

我們通過下面的實例來演示適配器模式的使用。其中,音頻播放器設備只能播放 mp3 文件,通過使用一個更高級的音頻播放器來播放 vlc 和 mp4 文件。

介紹:

意圖:將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。

主要解決:主要解決在軟體系統中,常常要將一些"現存的對象"放到新的環境中,而新環境要求的接口是現對象不能滿足的。

何時使用: 1、系統需要使用現有的類,而此類的接口不符合系統的需要。 2、想要建立一個可以重複使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作,這些源類不一定有一致的接口。 3、通過接口轉換,將一個類插入另一個類系中。(比如老虎和飛禽,現在多了一個飛虎,在不增加實體的需求下,增加一個適配器,在裡面包容一個虎對象,實現飛的接口。)

如何解決:繼承或依賴(推薦)。

關鍵代碼:適配器繼承或依賴已有的對象,實現想要的目標接口。

應用實例: 1、美國電器 110V,中國 220V,就要有一個適配器將 110V 轉化為 220V。 2、JAVA JDK 1.1 提供了 Enumeration 接口,而在 1.2 中提供了 Iterator 接口,想要使用 1.2 的 JDK,則要將以前系統的 Enumeration 接口轉化為 Iterator 接口,這時就需要適配器模式。 3、在 LINUX 上運行 WINDOWS 程序。 4、JAVA 中的 jdbc。

優點: 1、可以讓任何兩個沒有關聯的類一起運行。 2、提高了類的復用。 3、增加了類的透明度。 4、靈活性好。

缺點: 1、過多地使用適配器,會讓系統非常零亂,不易整體進行把握。比如,明明看到調用的是 A 接口,其實內部被適配成了 B 接口的實現,一個系統如果太多出現這種情況,無異於一場災難。因此如果不是很有必要,可以不使用適配器,而是直接對系統進行重構。 2.由於 JAVA 至多繼承一個類,所以至多只能適配一個適配者類,而且目標類必須是抽象類。

使用場景:有動機地修改一個正常運行的系統的接口,這時應該考慮使用適配器模式。

注意事項:適配器不是在詳細設計時添加的,而是解決正在服役的項目的問題。

實現:

我們有一個 MediaPlayer 接口和一個實現了 MediaPlayer 接口的實體類 AudioPlayer。默認情況下,AudioPlayer 可以播放 mp3 格式的音頻文件。

我們還有另一個接口 AdvancedMediaPlayer 和實現了 AdvancedMediaPlayer 接口的實體類。該類可以播放 vlc 和 mp4 格式的文件。

我們想要讓 AudioPlayer 播放其他格式的音頻文件。為了實現這個功能,我們需要創建一個實現了 MediaPlayer 接口的適配器類 MediaAdapter,並使用 AdvancedMediaPlayer 對象來播放所需的格式。

AudioPlayer 使用適配器類 MediaAdapter 傳遞所需的音頻類型,不需要知道能播放所需格式音頻的實際類。AdapterPatternDemo,我們的演示類使用 AudioPlayer 類來播放各種格式。

可私信我免費領取java課程、大數據資料等。

相關焦點

  • 設計模式之適配器模式(Java實現)
    設計模式之適配器模式(Java實現)小王正在和美女聊天,突然接到領導電話,要讓會議室投影匯報項目情況,只能暫時離開美女去了會議室,到了會議室,發現投影儀的接口和自己電腦中的接口不匹配這個在設計模式中就是適配器模式。適配器模式(Adapter Pattern):將一個類的接口變換成客戶端所期待的另一個接口,從而是原本因為接口不匹配而無法在一起工作的兩個類能夠在一起工作。適配器模式的通用類圖如下:
  • 深度好文:設計模式之——適配器模式
    今天給大家分享一下設計模式中的「適配器模式」。基本介紹適配器模式屬於「結構型模式」的一種。適配器模式的工作原理就是:用戶調用適配器轉換出來的接口,適配器在調用被適配類的相關接口,從而完成適配。通過不同的實現方式,我們可以將其分成三類:類適配器模式,對象適配器模式,接口適配器模式。
  • Java設計模式之適配器模式和橋接模式詳細解析
    現在則來學習下結構型模式的適配器模式和橋接模式。適配器模式 適配器模式主要有兩種類型,一種是類適配器模式,主要通過繼承來實現適配器功能;一種是對象適配器模式,通過組合來實現適配器功能。 這兩種適配器模式中,都實現了該功能,不過在這裡推薦使用對象適配器模式,相比類適配器模式,它更加靈活,也符合設計原則中的合成復用原則: 儘量使用合成/聚合的方式,而不是使用繼承。適配器模式的優點: 提升了類的復用和靈活度。
  • 程式設計師必備設計模式之適配器模式
    昨天是1024程式設計師節,特地停更一天,今天我們來講一個簡單的設計模式,適配器模式。適配器模式,它是一個結構性的設計模式。在我們的生活中,總是有各種各樣的適配器,最常見的,就是你去國外旅遊的時候,通常需要購買轉接插座,因為國內的插座與國外的標準不同,接口不同,你需要一個轉換器。當你使用這個轉換器的時候,你不用關心裏面是如何工作的,只需要關心插頭從什麼標準轉成什麼標準,而不需要關心轉化器如何實現,這便是適配器。
  • 「原創」讓設計模式飛一會兒|⑦適配器模式
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫大家好,我是高冷就是範兒,好久不見。過了一個光棍節,人相當懶散,一時沒啥靈感,文章更新速度較慢,抱歉。今天我們繼續來聊設計模式這個話題。
  • Java-今天學學適配器(Adaptor)設計模式
    1.適配器(Adaptor)設計模式1.1.生活中的適配電腦電源適配器:將電腦不能直接使用的220v交流電, 轉換 成電腦可以直接使用的20v直流電;1.2.適配器模式>適配器,主要就是將原本不能或者不方便直接使用的東西,轉換成可以直接或者方便使用的東西;1.3.Java中的適配在Java中,根據適配對象的不同,可以將適配器分為三類:類的適配;接口的適配;對象的適配;
  • 設計模式結構性:適配器模式(AdapterPattern)
    適配器模式(Adapter Pattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬於結構型模式,它結合了兩個獨立接口的功能。 這種模式涉及到一個單一的類,該類負責加入獨立的或不兼容的接口功能。舉個真實的例子,讀卡器是作為內存卡和筆記本之間的適配器。
  • 設計模式的解釋:使用代碼示例的適配器模式
    設計模式提供了一種可靠和簡單的方法來遵循經過驗證的設計原則,並編寫結構良好且可維護的代碼。適配器模式是面向對象軟體開發中流行和常用的模式之一。它遵循Robert C. Martin的依賴倒置原則,並使您可以重用現有的類,即使它不實現預期的接口。
  • 大神詳解,這麼詳細的Java設計模式不收藏可惜了
    引子設計模式是很多程式設計師總結出來的優秀實踐。曾經在剛開始寫項目的時候學習過設計模式,在開發過程中,也主動或者被動的使用過。現在寫代碼雖說不會特意明確在用哪種設計模式,但潛移默化的寫出來公認的優秀實踐代碼,畢竟看的比較清爽。
  • 從Java類庫看設計模式
    為了解決這樣的問題,人們提出了所謂的模式的概念。所謂模式,是指在一個特定背景下,反覆出現的問題解決方案。模式是經驗的文檔化。  軟體模式的概念現在比較的廣泛,涉及到分析,設計,體系結構,編碼,測試,重構等軟體構造生命期中的各個部分。這兒主要討論的是設計模式,指的是在軟體設計過程中反覆出現的一些問題的解決方法了。
  • java 23種設計模式及其在spring,tomcat,jdk中的應用
    設計模式是前人(一般都是大師)對程序設計經驗的總結,學習並應用設計模式可以使我們開發的項目更加規範、便於擴展和維護,這大概是為什麼設計模式基本是面試必問的原因吧!本文主要內容有四部分:設計原則、設計模式分類、23種設計模式、設計模式應用。設計模式雖多,但重要的、主流開源框架應用較多的往往就那幾個。
  • Java設計模式:三大類工廠方法模式
    GOF在《設計模式》一書中將工廠模式分為兩類:工廠方法模式(Factory Method)與抽象工廠模式(Abstract Factory)。將簡單工廠模式(Simple Factory)看為工廠方法模式的一種特例,兩者歸為一類。  二、簡單工廠模式  簡單工廠模式又稱靜態工廠方法模式。重命名上就可以看出這個模式一定很簡單。
  • 常用的Java設計模式
    本文總結了幾個大家常用的Java設計模式,並給出代碼示例。1、單例模式單例(Singleton)模式的定義:指一個類只有一個實例,且該類能自行創建這個實例的一種模式。在並發測試中,單例模式不利於代碼調試。在調試過程中,如果單例中的代碼沒有執行完,也不能模擬生成一個新的對象。單例模式的功能代碼通常寫在一個類中,如果功能設計不合理,則很容易違背單一職責原則。單例模式的實現單例模式的構造器是被private修飾的,一般通過getInstance()的方法來獲取實例。
  • 重學Java 設計模式:實戰外觀模式
    一般情況下對於外觀模式的使用通常是用在複雜或多個接口進行包裝統一對外提供服務上,此種使用方式也相對簡單在我們平常的業務開發中也是最常用的。你可能經常聽到把這兩個接口包裝一下,但在本例子中我們把這種設計思路放到中間件層,讓服務變得可以統一控制。1.
  • Java門面模式(或外觀模式)
    門面模式(或外觀模式)隱藏系統的複雜性,並為客戶端提供一個客戶端可以訪問系統的接口。 這種類型的設計模式屬於結構模式,因為此模式為現有系統添加了一個接口以隱藏其複雜性。門面模式(或外觀模式)的實現實例結構如下圖中所示 -第1步創建一個接口,如下 -Shape.javapublic interface Shape {void draw
  • Java Singleton設計模式DEMO
    當您只想擁有給定類的一個實例時,將使用單例設計模式。它是一種創造性的設計模式,我們處理對象的創建。動機和現實世界的例子在面向對象的設計中,某些類只有一個實例非常重要。那是因為它們代表了一種獨特的東西,這是同類產品中的一種。
  • Java設計模式之行為型模式
    需要設計一個接口,為一系列實現類提供統一的方法,多個實現類實現該接口,設計一個抽象類(可有可無,屬於輔助類),提供輔助函數。命令模式【Command】 【學習難度:★★★☆☆,使用頻率:★★★★☆】定義:在面向對象程式設計的範疇中,命令模式(Command Pattern)是一種設計模式,它嘗試以物件來代表實際行動。一般來說,行為請求者與行為實現者通常是一種緊耦合的關係。
  • 設計模式之工廠模式-抽象工廠模式
    設計模式之工廠模式-抽象工廠模式抽象工廠模式:定義了一個接口用於創建相關或有依賴關係的對象簇,而無需明確指定具體類。我們來看看使用抽象工廠模式來實現的披薩項目。來源:凱哥Java(kaigejava)先來看看項目結構:說明:1:工廠接口2:兩個實現類3:訂單對象
  • Java策略模式
    在策略模式中,可以在運行時更改類行為或其算法。 這種類型的設計模式屬於行為模式。在策略模式中,創建表示各種策略對象和其行為根據其策略對象而變化的上下文對象。 策略對象更改上下文對象的執行算法。策略模式示例的結構如下圖所示 -第1步創建一個類接口,其代碼如下 -Strategy.javapublic interface Strategy {public int
  • ...設計模式:實戰策略模式「模擬多種營銷類型優惠券,折扣金額計算...
    取別人之強補自己之弱,矛與盾的結合可能就是坦克。能把複雜的知識講的簡單很重要在學習的過程中我們看過很多資料、視頻、文檔等,因為現在資料視頻都較多所以往往一個知識點會有多種多樣的視頻形式講解。│ └── ZKCouponDiscount.java ├── Context.java └── ICouponDiscount.java「策略模式模型結構」策略模式模型結構