Java 当新对象是原始对象的一部分时,是否将对实例的引用传递到另一个对象?
当新实例将成为原始实例的一部分时,将父类的Java 当新对象是原始对象的一部分时,是否将对实例的引用传递到另一个对象?,java,oop,architecture,Java,Oop,Architecture,当新实例将成为原始实例的一部分时,将父类的这个实例传递到另一个对象的构造函数时(从设计角度来看),是否会有任何缺陷 public class Order extends AbstractOrder { private final OrderExecutionStrategy executionStrategy; private Order() { this.executionStrategy = new OrderExecutionStrategy(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();
}
}
公共类OrderExecutionStrategy扩展了AbstractOrderExecutionStrategy{
公共订单执行策略(最终订单){
超级(订单);
}
@凌驾
公共可选执行部分(最终大十进制newPrice、最终TradeOrders){
资产不为空(订单,简称“订单”);
资产isGtZero(新价格,简称“新价格”);
if(ComparisonUtils.equals(getOrder().getPrice(),newPrice)){
final BigDecimal reaminingAmount=this.getOrder().summary().getRemainToFill();
if(ValidationUtils.isGtZero(reaminingAmount)){
返回可选的.of(新订单部分(this.getOrder().getId(),reaminingAmount));
}
}
返回可选的.empty();
}
}
我看不出这里面有任何设计缺陷
但是,有几个警告:
我说的是设计缺陷,而不是实现缺陷
“我认为,这两种情况可能会相互产生负面影响,形成一个无休止的循环或某种意义上的循环。”
这些将是实现缺陷(又称bug),而不是设计缺陷。需要更多的上下文来检查这类事情
您只向我们展示了设计的一小部分,对于如何将其融入“大局”几乎没有任何线索
很难说。细节不够。@StephenC我应该澄清什么样的细节?我认为这两个实例可能会相互产生负面影响,一个无止境的循环,或者从这个意义上说,可以向我们展示父类,策略类,并解释代码应该做什么。“我认为这两个实例可能会相互产生负面影响,一个无休止的循环或类似的情况。”-显然,我们不能说这些事情在没有看到代码的情况下是否会发生。当然,它们可能是实现缺陷(又称bug),而不是设计缺陷。(在本文中,“设计”是什么意思?@StephenC添加了strategy类,我所说的设计是指这些对象的组成类型。