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

结构型模式 - 适配器模式 (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");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值