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

Java场景下如何遵循单一职责原则设计含draw、move方法的Cheetah类

关于Cheetah类拆分的SRP适配建议

首先明确单一职责原则的核心判定标准:一个类只能有一个引起它变更的原因,按照这个标准,你现有的Cheetah类确实需要拆分,但不建议直接拆分为CheetahMove、CheetahDraw两个独立类,更合理的拆分方案如下:

推荐拆分逻辑

  • 保留核心实体类Cheetah
    这个类只存储猎豹的核心状态(坐标、移动速度、朝向、生命值等业务属性),仅保留move()方法负责移动逻辑的计算(比如坐标更新、碰撞判定、速度调整等)。这个类的变更原因只有「猎豹移动/业务规则调整」一种,完全不依赖任何Swing UI相关的API。
  • 独立出渲染类CheetahSwingRenderer
    这个类仅提供draw(Cheetah cheetah, Graphics g)方法,接收猎豹实体的当前状态和Swing画笔对象,专门实现猎豹的绘制逻辑。这个类的变更原因只有「猎豹渲染样式/UI框架调整」一种,和猎豹的业务行为完全解耦。

为什么不拆成CheetahMove?

移动是猎豹实体的核心内聚行为,和猎豹的状态属性强绑定,如果单独把move()方法拆成独立类,会导致状态和行为分离,你每次操作猎豹移动都要同时维护状态类和行为类的关联,反而会增加代码冗余,降低内聚性。

拆分的收益

如果不拆分,两种完全不同的变更逻辑耦合在同一个类里:比如后续你要把UI框架从Swing迁移到JavaFX,修改draw逻辑的时候很容易误碰移动相关代码;或者调整移动碰撞规则的时候,也可能不小心改动到渲染参数,引入不必要的bug。拆分后两类逻辑完全隔离,迭代、测试、复用的成本都会大幅降低。

如果你的项目只是几百行的小型Demo,不需要后续迭代,也可以选择不拆分,单一职责原则的应用需要结合项目规模和迭代预期权衡,不需要为了符合规范强行过度拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:36:08