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

请验证我的编程作业是否正确应用了Adapter模式

关于Adapter模式在你的作业中应用的分析

嘿,咱们先来明确一下Adapter模式的核心:它的作用是把一个类的接口转换成客户端期望的另一个接口,解决的是两个已有接口不兼容的问题。结合你的描述,我来帮你拆解当前设计的问题:

你的当前设计角色混淆了

你把Car、Plane、Submarine作为适配器类,用来连接Vehicle超类和PrintStates接口——这其实颠倒了Adapter模式的角色划分:

  • 目标接口(Target):应该是PrintStates(因为你希望这些交通工具能提供“打印状态”的能力)
  • 适配者(Adaptee):应该是Vehicle及其子类(Car/Plane/Submarine),也就是本身没有实现PrintStates接口,但拥有自己的状态数据(比如速度、油量、潜深等)的类
  • 适配器(Adapter):应该是一个单独的类,它需要同时持有适配者(比如Car的实例),并且实现目标接口PrintStates,把PrintStates的方法(比如printAllStates())委托给适配者的状态获取方法。

而你现在把Car/Plane/Submarine本身当适配器,相当于让它们既是“被适配的对象”,又是“做适配转换的对象”,这不符合Adapter模式的核心逻辑——Adapter模式的关键是分离适配逻辑和业务对象本身。

两种正确的实现方向

1. 真的需要Adapter模式的场景(比如Vehicle是不可修改的外部类)

如果Vehicle是你无法修改的第三方类,或者出于设计原则不想给它添加PrintStates接口,那正确的做法是:

  • 保留Vehicle、Car、Plane、Submarine作为单纯的业务类,只负责封装自身状态和行为
  • 创建单独的适配器类,比如:
    // 目标接口
    public interface PrintStates {
        void printAllStates();
    }
    
    // Car的适配器
    public class CarPrintAdapter implements PrintStates {
        private Car car;
    
        public CarPrintAdapter(Car car) {
            this.car = car;
        }
    
        @Override
        public void printAllStates() {
            System.out.println("Car状态:速度=" + car.getSpeed() + ",油量=" + car.getFuel());
        }
    }
    
    同理再写PlanePrintAdapter、SubmarinePrintAdapter,这样客户端(你的菜单逻辑)只需要针对PrintStates接口编程,传入对应的适配器实例即可调用打印方法。

2. 不需要Adapter模式的场景(Vehicle是你自己可控的代码)

如果Vehicle是你自己编写的类,完全可以直接让它实现PrintStates接口,或者在子类中重写打印方法:

public abstract class Vehicle implements PrintStates {
    // 通用属性和方法
}

public class Car extends Vehicle {
    @Override
    public void printAllStates() {
        // 打印Car的专属状态
    }
}

这种情况下根本不需要Adapter模式,因为不存在接口不兼容的问题,直接让业务类实现目标接口更简单直接。

结合你的程序功能

你的菜单逻辑需要根据用户输入展示对应对象的状态,用上面两种正确的方式,都能很好地实现:

  • 用户输入P/C/S时,要么创建对应交通工具的适配器实例,要么直接创建对应交通工具实例,调用printAllStates()方法
  • 输入B时展示历史选择,这个逻辑和Adapter模式无关,正常维护一个历史列表即可

总结一下:你当前的设计没有正确应用Adapter模式,核心问题是把业务对象和适配器角色混在了一起。根据你的实际场景选择上面两种方向之一,就能符合设计模式的要求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:27:06