Java设计模式之适配器模式

适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。适配器模式允许原本不兼容的类能够合作无间。

在软件开发中,适配器模式经常用于以下情况:

  1. 当需要使用一个已经存在的类,但其接口与需求不匹配时。
  2. 当需要创建一个可复用的类,该类与一些不兼容的接口协作。

适配器模式包含以下几个角色:

  1. 目标接口(Target Interface):客户端所期望的接口,适配器将目标接口转换为适配者接口。
  2. 适配者(Adaptee):需要被适配的类或接口。
  3. 适配器(Adapter):实现目标接口,并持有适配者对象,将目标接口的方法调用转发给适配者对象。

下面是一个简单的示例,展示适配器模式的使用:

// 目标接口
interface MediaPlayer {
    void play(String audioType, String fileName);
}

// 适配者接口
interface AdvancedMediaPlayer {
    void playVlc(String fileName);
    void playMp4(String fileName);
}

// 适配者实现类
class VlcPlayer implements AdvancedMediaPlayer {
    @Override
    public void playVlc(String fileName) {
        System.out.println("Playing vlc file: " + fileName);
    }

    @Override
    public void playMp4(String fileName) {
        // 什么也不做
    }
}

class Mp4Player implements AdvancedMediaPlayer {
    @Override
    public void playVlc(String fileName) {
        // 什么也不做
    }

    @Override
    public void playMp4(String fileName) {
        System.out.println("Playing mp4 file: " + fileName);
    }
}

// 适配器类
class MediaAdapter implements MediaPlayer {
    private AdvancedMediaPlayer advancedMediaPlayer;

    public MediaAdapter(String audioType) {
        if (audioType.equalsIgnoreCase("vlc")) {
            advancedMediaPlayer = new VlcPlayer();
        } else if (audioType.equalsIgnoreCase("mp4")) {
            advancedMediaPlayer = new Mp4Player();
        }
    }

    @Override
    public void play(String audioType, String fileName) {
        if (audioType.equalsIgnoreCase("vlc")) {
            advancedMediaPlayer.playVlc(fileName);
        } else if (audioType.equalsIgnoreCase("mp4")) {
            advancedMediaPlayer.playMp4(fileName);
        }
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        MediaPlayer mediaPlayer = new MediaAdapter("mp4");
        mediaPlayer.play("mp4", "movie.mp4");
    }
}

在上面的示例中,我们有一个目标接口 MediaPlayer,定义了播放音频的方法 play。然后我们有两个适配者接口 AdvancedMediaPlayer,分别用于播放 vlcmp4 格式的音频。适配器类 MediaAdapter 实现了目标接口,并持有适配者对象,将目标接口的方法调用转发给适配者对象。

在客户端代码中,我们创建了一个适配器对象 MediaAdapter,并调用了 play 方法来播放 mp4 格式的音频。适配器内部会将该调用转发给适配者对象 Mp4Player,从而实现了适配器模式的适配功能。

适配器模式使得原本不兼容的类能够协同工作,提高了代码的复用性和灵活性。

你可能感兴趣的:(java,设计模式,适配器模式)