You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:代码场景是否为Adapter模式?确认对应设计模式名称

嗨,我来帮你理清这两个问题:

问题1:你的示例是否属于Adapter设计模式?

答案是不能。

Adapter设计模式的核心是解决接口不兼容的问题——比如有一个客户端期望使用接口X,但现有的类只实现了接口Y,这时候就需要一个适配器类,把Y的接口转换成X的接口,让两者能协同工作。

而你的代码里并没有涉及到不同接口之间的适配,只是通过抽象类给接口提供了空实现,所以完全不属于Adapter模式的应用场景。

问题2:接口+空实现抽象类的场景对应的设计模式

这个场景对应的是默认适配器模式(Default Adapter Pattern),它属于适配器模式的一种变体,也常被称为接口适配器模式。

这个模式的核心目的就是解决你遇到的问题:当一个接口定义了多个方法,但实现该接口的类只需要用到其中一部分方法时,我们可以先创建一个抽象类,实现该接口并为所有方法提供空的默认实现,之后子类只需要继承这个抽象类,覆盖自己需要的方法即可,不用强制实现所有接口方法。

你的代码正好完美契合这个模式:

  • AInterface 是拥有多个方法的目标接口
  • AAbstract 是默认适配器类,实现了AInterface并给m1()、m2()提供了空实现
  • Main 作为子类,只覆盖了需要的m1()方法,不用处理m2()

对应的代码展示:

// 定义包含多个方法的接口
public interface AInterface {
    public void m1();
    public void m2();
}

// 默认适配器抽象类,提供空实现
public abstract class AAbstract implements AInterface {
    public void m1() { }
    public void m2() { }
}

// 子类仅覆盖需要的方法
public class Main extends AAbstract {
    @Override
    public void m1() {
        System.out.println("I am m1");
    }
    public static void main(String[] args) {
        Main main = new Main();
        main.m1();
    }
}

这个模式能极大地提升代码灵活性,避免了子类被迫实现不需要的方法的冗余情况。

内容的提问来源于stack exchange,提问作者Lokesh_K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:35:39