面试题答案
一键面试适合使用适配器模式的场景
- 旧接口适配新系统:当需要使用一个已经存在的类,但它的接口与当前系统所期望的接口不兼容时。例如,在一个新开发的Java图形处理系统中,需要使用一个旧的图像加载库。旧库提供的加载图像方法的参数和返回值类型与新系统要求的接口不一致,此时就可以使用适配器模式将旧库的接口适配成新系统期望的接口。
- 复用已有类的部分功能:如果想复用某个类的部分功能,但该类接口不符合需求。比如有一个功能强大的日志记录类,它有很多复杂的方法,但当前项目只需要其中简单的日志打印功能,且需要以项目特定的接口形式调用,这时可通过适配器模式来实现。
实现方式
以将旧的图像加载库适配到新的图形处理系统为例:
- 定义目标接口:
public interface NewImageLoader {
Image loadImage(String filePath);
}
- 已有适配者类(旧图像加载库类):
public class OldImageLoader {
public BufferedImage load(String path) {
// 旧的图像加载逻辑
return null;
}
}
- 创建适配器类:
public class ImageLoaderAdapter implements NewImageLoader {
private OldImageLoader oldLoader;
public ImageLoaderAdapter(OldImageLoader oldLoader) {
this.oldLoader = oldLoader;
}
@Override
public Image loadImage(String filePath) {
BufferedImage bufferedImage = oldLoader.load(filePath);
// 可能需要进行一些转换操作
return (Image) bufferedImage;
}
}
- 使用适配器:
public class Main {
public static void main(String[] args) {
OldImageLoader oldLoader = new OldImageLoader();
ImageLoaderAdapter adapter = new ImageLoaderAdapter(oldLoader);
Image image = adapter.loadImage("image.jpg");
}
}
上述代码通过创建适配器类 ImageLoaderAdapter
,实现了将 OldImageLoader
适配到 NewImageLoader
接口,使得旧的图像加载库能在新系统中使用。