Java设计模式之适配器模式的妙用

适配器模式是一种结构型设计模式,允许不兼容对象协同工作,它将一个接口转换为另一个,使对象能够顺利交互。对象适配器通过创建包含被适配对象的适配器对象,并实现目标接口,实现适配器模式。在一个实战案例中,通过适配器模式,客户端(如 mediaplayer)可以播放高级格式的媒体(如 vlc),尽管其本身仅支持普通媒体格式(如 mp3)。

Java设计模式之适配器模式的妙用

Java 设计模式之适配器模式的妙用

简介

适配器模式是一种结构型设计模式,它允许一个对象与另一个具有不兼容接口的对象协同工作。换句话说,它将一个接口转换为另一个接口,使原本不兼容的两个对象能够顺利交互。

结构

适配器模式的结构如下图所示:

                        +--------------------+
                        |       Target       |
                        +--------------------+
                                 ^
                                 |
                        +--------------------+
                        |    Adaptee(被适配) |
                        +--------------------+
                                 ^
                                 |
                  +----------------------------+
                  |  Object Adapter (对象适配器)  |
                  +----------------------------+
                             |                 |
                              \_______________/
  • Target (目标):定义客户端需要的接口。
  • Adaptee (被适配):定义要被适配的接口。
  • Adapter (适配器):将 Adaptee 接口转换为 Target 接口,从而使客户端能够使用 Adaptee。

对象适配器

对象适配器是一种实现适配器模式的简单方式。它创建了一个新的适配器对象,该对象将 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();
    }
}

实战案例

假设我们有两个类:MediaPlayerAdvancedMediaPlayerMediaPlayer 类负责播放普通格式的媒体(如 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设计模式之适配器模式的妙用的详细内容,更多请关注www.sxiaw.com其它相关文章!