实用 AI

可在线运行 AI 集合,涵盖 AI 文案生成、写作辅助、AI 绘图与照片修复、AI 配音、字幕生成、语音转录以及 AI 视频创作和数字人等多种 AI 服务

查看详情

适配器模式

软件设计模式
2021-05-17 14:29 · 阅读时长3分钟
小课

适配器模式是一种结构型设计模式,适配器用于抽象出一个中间层做转换工作,使得两个原本不相关或不兼容的接口共同工作,主要用于兼容目前已存在的接口。

假设我们已经有一个搜索引擎类SearchEngine,它接收一个Request作为参数,Request有一个方法getEnglishBody,用于返回英文内容作为搜索关键字,定义如下。

public interface Request {
    String getEnglishBody();
}

但是我们目前业务拿到的数据Query是中文的,其定义如下。

public interface Query {
    String getChineseBody();
}

在不考虑设计模式的情况下,我们会写一个方法将Query中的中文数据转化为英文数据,然后再构造一个Request对象传递给SearchEngine,这样没有问题,但是不够面向对象,下面看看更加面向对象的方式来对接两个不兼容接口,也就是适配器模式。

适配器模式有两种实现方式,对象适配器和类适配器,两者实现方式有一些差别,类适配器是通过实现或继承的方式持有被适配的对象,而对象适配器则是通过组合的方式持有被适配的对象。

对象适配器
1public class RequestAdapter implements Request {
2
3    private final Query query;
4
5    public RequestAdapter(Query query) {
6        this.query = query;
7    }
8
9    @Override
10    public String getEnglishBody() {
11        return translate2English(query.getChineseBody());
12    }
13}
类适配器
public class RequestAdapter implements Request, Query {
    @Override
    public String getEnglishBody() {
        return translate2English(getChineseBody());
    }
    
    ...
}

无论何种实现方式,RequestAdapter都可以作为参数传入SearchEngine了。

总结

适配器模式优点就是可以兼容两个不同的接口,提到代码的扩展性和复用性,比如说某功能已经有一个比较好的实现,但是它的入参和我们目前应用的数据不一致,我们可以写一个适配器将目前的数据转化为其要求的数据,从而达到复用的目的。

适配器模式adapter设计模式