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

UML建模中Exercise与ExercisesForTheWorkoutRoutine类的关联关系设计

健身房管理系统UML类图关联设计方案

核心结论

别用泛化或聚合,应该用单向1对多关联连接Exercise和ExercisesForTheWorkoutRoutine,配合业务逻辑层的实例引用依赖处理就能满足需求。

各选项排除理由

  • 泛化(继承):完全不适用。泛化是「is-a」关系,ExercisesForTheWorkoutRoutine不是一种Exercise——它是基于Exercise的训练执行配置(额外加了恢复时间、组数、次数),本质是「包含Exercise的配置项」,而非Exercise的子类。
  • 聚合:语义不符。聚合是整体-部分关系,部分可以脱离整体独立存在,但你的需求是Exercise被删除时,对应的ExercisesForTheWorkoutRoutine必须跟着删除,说明后者完全依赖前者的存在,聚合的语义不支持这种强绑定。
  • 1对1关联:不符合实际场景。一个Exercise可以被多个训练计划的ExercisesForTheWorkoutRoutine引用(比如多个用户的训练计划都用到「平板支撑」这个Exercise),明显是1对多的关联关系。

具体设计细节

UML类图表示

  • 在ExercisesForTheWorkoutRoutine类和Exercise类之间画单向箭头(箭头指向Exercise),表示ExercisesForTheWorkoutRoutine关联Exercise。
  • 标注multiplicity:
    • ExercisesForTheWorkoutRoutine端标注1:每个训练配置必须关联一个有效的Exercise。
    • Exercise端标注0..*:一个Exercise可以被零个或多个训练配置引用。

Java实现建议

  • 不要用字符串名称关联,直接在ExercisesForTheWorkoutRoutine类中持有Exercise类型的成员变量,避免同名Exercise的误删问题:
    public class ExercisesForTheWorkoutRoutine {
        private Exercise exercise; // 关联具体Exercise实例
        private int restTime;
        private int repetitions;
        private int sets;
        // 构造器、getter/setter等方法
    }
    
  • 当健身房需要移除某个Exercise实例时,遍历所有TrainingPlan下的WorkoutDay,找到所有exercise成员变量指向该实例的ExercisesForTheWorkoutRoutine,直接删除即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:46:13