设计模式(十)适配器模式

237 阅读1分钟

一、适配器的基本概念

1、定义

将一个接口转换为另一个客户期望的接口。

2、应用场景

你想使用一个已经存在的类,而它的接口不符合你的需求。类似于一个转接口,将电源线的接口转成你电脑可用的接口。

3、类图

image.png

  • Target:期待的目标接口

  • Adaptee:原来需要转换的目标

  • Adapter:适配器角色。目的是将原来的目标转换成客户期望的目标

4、特点:

  • 更好的复用性和扩展性

二、实例

一个mp4播放器可以播放mp4,一个mp3播放器可以播放mp3,如果想在mp3中播放mp4格式的文件。

1、Target:

期待转成MP3

public interface IMp3Player {
  /**
   * 播放MP3
   * @param fileName
   */
  void playMp3(String fileName);
}
public class MyMp3Player implements IMp3Player{
  @Override
  public void playMp3(String fileName) {
    System.out.println("正在播放mp3:"+fileName);
  }
}

2、Adaptee

原来的文件mp4

public interface IMp4Player {
  /**
   * 播放mp4
   * @param fileName
   */
  void playMp4(String fileName);

  /**
   * 获取到文件名
   * @return
   */
  String getFileName();
}
public class MyMp4Player implements IMp4Player{
  public String mFileName;

  @Override
  public void playMp4(String fileName) {
    this.mFileName = fileName;
    System.out.println("正在播放mp4:"+fileName);
  }

  @Override
  public String getFileName() {
    return mFileName;
  }
}

3、Adapter

一个格式转换器

public interface IMediaAdapter {
  /**
   * 文件转换
   */
  void conver();
}
public class MyMediaAdapter implements IMediaAdapter{
  private IMp4Player mIMp4Player;
  private IMp3Player mMp3Player;

  public MyMediaAdapter(IMp4Player mp4Player, IMp3Player mp3Player){
    this.mIMp4Player = mp4Player;
    this.mMp3Player = mp3Player;
  }

  @Override
  public void conver() {
    String fileName = mIMp4Player.getFileName();
    this.mMp3Player.playMp3(fileName.replace("mp4","mp3"));
  }
}

4、使用:

public class AdapterTest {

  public static void main(String[] args){
    //创建MP4,并播放
    IMp4Player mp4Player = new MyMp4Player();
    mp4Player.playMp4("my.mp4");
    //创建mp3
    IMp3Player mp3Player = new MyMp3Player();
    //通过适配器将mp4的文件转换,并在mp3中播放
    IMediaAdapter adapter = new MyMediaAdapter(mp4Player, mp3Player);
    adapter.conver();
  }
}

二、Adapter介绍

作用:

  • 将一个数据的集合传入,通过Adapter,将每一项数据转换为视图
  • 显示的数据类型和数量不同,转换出来的视图也不相同

汇总:设计模式总结