適配器模式是一種結構型設計模式,允許不相容物件協同工作,它將一個介面轉換為另一個,使物件能夠順利互動。物件適配器透過建立包含被適配器對象的適配器對象,並實現目標接口,實現適配器模式。在一個實戰案例中,透過適配器模式,客戶端(如 MediaPlayer)可以播放高級格式的媒體(如 VLC),儘管本身僅支援普通媒體格式(如 MP3)。
Java 設計模式之適配器模式的妙用
##簡介
適配器模式是一種結構型設計模式,它允許一個物件與另一個具有不相容介面的物件協同工作。換句話說,它將一個介面轉換為另一個接口,使原本不相容的兩個物件能夠順利互動。結構
適配器模式的結構如下圖所示:+--------------------+ | Target | +--------------------+ ^ | +--------------------+ | Adaptee(被适配) | +--------------------+ ^ | +----------------------------+ | Object Adapter (对象适配器) | +----------------------------+ | | \_______________/
物件適配器
物件適配器是一種實作適配器模式的簡單方式。它創建了一個新的適配器對象,該對象將 Adaptee 對象包含在其中並實作 Target 介面。// Target 接口 interface Target { int operation(); } // Adaptee 接口 interface Adaptee { int specificOperation(); } // Adapter (对象适配器) class Adapter implements Target { private final Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public int operation() { return adaptee.specificOperation(); } }
實戰案例
假設我們有兩個類別:MediaPlayer 和 AdvancedMediaPlayer。 MediaPlayer 類別負責播放普通格式的媒體(如 MP3),而 AdvancedMediaPlayer 類別負責播放進階格式的媒體(如 VLC)。我們要使用適配器模式來使 MediaPlayer 類別能夠播放進階格式的媒體。
class MediaPlayer { public void playMP3(String filename) { System.out.println("Playing MP3: " + filename); } } class AdvancedMediaPlayer { public void playVLC(String filename) { System.out.println("Playing VLC: " + filename); } } class MediaAdapter implements MediaPlayer { private final AdvancedMediaPlayer advancedMediaPlayer; public MediaAdapter(AdvancedMediaPlayer advancedMediaPlayer) { this.advancedMediaPlayer = advancedMediaPlayer; } @Override public void playMP3(String filename) { advancedMediaPlayer.playVLC(filename); } } // 客户调用 MediaPlayer audioPlayer = new MediaAdapter(new AdvancedMediaPlayer()); audioPlayer.playMP3("FileName.vlc");輸出:
Playing VLC: FileName.vlc透過使用適配器模式,我們在不修改 MediaPlayer 類別的原始程式碼的情況下,擴展了它的功能,使其能夠播放高級格式的媒體。
以上是Java設計模式之適配器模式的妙用的詳細內容。更多資訊請關注PHP中文網其他相關文章!