结构型模式 - 适配器模式 (Adapter Pattern)

适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。


  • 类适配器,适用于要适配的类是一个接口,定义了规范。然后配合 extend 和 implements
public class SDAdapterTF extends TFCardImpl implements SDCard {
	// 实现 SDCard 的标准方法,读取 sd方法
	public String readSD() {
		// 适配 readTF 来当成 readSD 使用,达到适配的效果
		return readTF();
	}
}
  • 对象适配器,适用于要适配的是类,因为Java 不支持多继承 extends , 不采用 extends 就不会把宝贵的继承位占掉.
public class SDAdapterTF implements SDCard {
	private TFCard tfCard;

	public SDAdapterTF(TFCard tfCard) {
		this.tfCard = tfCard; // 由构造函数传递对象进来
	}

	public String readSD() {
		// 利用成员对象的方式来调用,就不会占用 extends
		return tfCard.readTF();
	}
}

  • 接口适配器

这个也经常用, 当你只想要实现部分功能, 这么做就不需要全部实现

// 定义媒体播放器接口,包含多种播放方法
interface MediaPlayer {
    void playMP3(String fileName);
    void playMP4(String fileName);
    void playAVI(String fileName);
}

// 接口适配器抽象类,实现 MediaPlayer 接口并提供默认空实现
abstract class MediaPlayerAdapter implements MediaPlayer {
    @Override
    public void playMP3(String fileName) {
        // 默认空实现
    }

    @Override
    public void playMP4(String fileName) {
        // 默认空实现
    }

    @Override
    public void playAVI(String fileName) {
        // 默认空实现
    }
}

// 具体的 MP3 播放器类,继承自 MediaPlayerAdapter 并重写 playMP3 方法
class MP3Player extends MediaPlayerAdapter {
    @Override
    public void playMP3(String fileName) {
        System.out.println("Playing MP3 file: " + fileName);
    }
}

// 具体的 MP4 播放器类,继承自 MediaPlayerAdapter 并重写 playMP4 方法
class MP4Player extends MediaPlayerAdapter {
    @Override
    public void playMP4(String fileName) {
        System.out.println("Playing MP4 file: " + fileName);
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        // 创建 MP3 播放器对象
        MediaPlayer mp3Player = new MP3Player();
        mp3Player.playMP3("song.mp3");

        // 创建 MP4 播放器对象
        MediaPlayer mp4Player = new MP4Player();
        mp4Player.playMP4("movie.mp4");
    }
}
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐