结构型模式 - 适配器模式 (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");
}
}