如何解决哪种设计模式最适合用于将模型与行为分开?
我有类 Elevator,其中包含有关 Elevator 本身的基本信息。喜欢这里:
@Builder
@Getter
@Setter
public class Elevator {
private final int id;
private final float maxSpeed;
private final float maxLiftingCapacity;
private float currentSpeed;
private float currentConditionFactor;
private Dimensions dimensions;
private Localization localization;
}
现在我想将电梯的行为与模型分开,我想创建另一个类,也许它将实现 Runnable 或 Callable(现在无关紧要,它应该是通用的)。它将有这样的方法(原型):
public class ElevatorRunnable implements Sleepable {
private final Elevator elevator;
public ElevatorRunnable(Elevator elevator) {
this.elevator = elevator;
}
private void moveUp() {
float posY = elevator.getLocalization().getY();
if (posY >= elevator.getBuilding().getGroundHeight()) {
elevator.getLocalization().setY(posY - elevator.getCurrentSpeed());
}
}
private void moveDown() {
float posY = elevator.getLocalization().getY();
if (posY <= elevator.getBuilding().getHeight()) {
elevator.getLocalization().setY(elevator.getLocalization().getY() + elevator.getCurrentSpeed());
}
}
我真的不认为现在这样是正确的,所以我的问题是,我应该使用哪种模式将对象的信息与 run() 方法等分开。它应该是装饰器吗?
先谢谢你!
解决方法
我认为您的代码看起来不错。重点是在行为类中没有状态。你不需要设计模式。嗯,实际上,你已经用过一个:组合。
由于“电梯本身向上/向下移动”(这意味着逻辑将进入 Elevator
)或“控制器处理电梯的移动”,因此可以过度扩展这种特定情况,在这种情况下,{ {1}} 类可以具有该行为。
也可以讨论 Controller
字段,因为位置实际上不是电梯属性,而是控制器属性。
在某些情况下,将行为移到其他地方是有意义的。在这种情况下,我认为将所有内容都放在一个类中更有意义。电梯具有给定的属性,可以上下移动。无需把事情复杂化。
我也觉得 Runnable
的名字令人困惑。 Runnable 意味着该类可用于运行某些代码。例如,接口 Runnable
(https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Runnable.html) 可以扩展为由 Thread
运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。