【发布时间】:2021-05-23 21:24:12
【问题描述】:
当新实例将成为原始实例的一部分时,将父类的 this 实例传递给另一个对象的构造函数时,是否存在任何缺陷(从设计角度来看)?
public class Order extends AbstractOrder {
private final OrderExecutionStrategy executionStrategy;
private Order() {
this.executionStrategy = new OrderExecutionStrategy(this);
}
// the implementation omitted for brevity...
}
我需要从 OrderExecutionStrategy 类中的父实例访问数据。
public class OrderExecutionStrategy extends AbstractOrderExecutionStrategy {
public OrderExecutionStrategy(final Order order) {
super(order);
}
@Override
public Optional<OrderPortion> executePortion(final BigDecimal newPrice, final TradeOrders orders) {
AssertUtils.notNull(orders, "orders");
AssertUtils.isGtZero(newPrice, "newPrice");
if (ComparisonUtils.equals(getOrder().getPrice(), newPrice)) {
final BigDecimal reaminingAmount = this.getOrder().summary().getRemainToFill();
if (ValidationUtils.isGtZero(reaminingAmount)) {
return Optional.of(new OrderPortion(this.getOrder().getId(), reaminingAmount));
}
}
return Optional.empty();
}
}
【问题讨论】:
-
很难说。细节不够。
-
@StephenC 我应该澄清什么样的细节?我认为这两个实例可能会相互产生负面影响,一个无限循环或某种意义上的东西。
-
好吧,也许向我们展示父类,策略类,并解释代码应该做什么。 “我认为这两个实例可能会相互产生负面影响,形成无限循环或某种意义上的东西。” - 显然,如果没有看到代码,我们不能说这些事情是否会发生。 OTOH,它们可能是实现缺陷(又名错误)而不是设计缺陷。 (在这种情况下,“设计”是什么意思?)
-
@StephenC 添加了策略类,按设计我的意思是这些对象的组合类型。
标签: java oop architecture