【发布时间】:2014-04-11 14:04:11
【问题描述】:
我正在构建一个带有坐标/向量的数学库。
有一个ReadableCoord 和WritableCoord 接口。
AbstractCoordValue 可以扩展以覆盖坐标获取器。
问题是,不可变坐标 (AbstractCoordValue) 中的方法可以通过两种方式实现,如这里所示的 VARIANT 1 和 VARIANT 2。
我的 DRY 直觉告诉我选择第一个(然后 impl 只在一个地方),但我不确定第二个是否没有更少的开销。
使用哪一个?
public abstract class AbstractCoordValue implements ReadableCoord {
// x(), y(), z() are abstract getters from the interface
@Override
public WritableCoord copy()
{
return new CoordVariable(x(), y(), z());
}
/* VARIANT 1 */
@Override
public WritableCoord add(double x, double y, double z)
{
return copy().add_ip(x(), y(), z()));
}
/* VARIANT 2 */
@Override
public WritableCoord add(double x, double y, double z)
{
return new CoordVariable(x()+x, y()+y, z()+z));
}
// --- snip ---
}
还有扩展类,可变的:
public class CoordVariable extends AbstractCoordValue implements WritableCoord {
private double x, y, z;
// implements x(), y(), z() as getters
public CoordVar(double x, double y, double x) {
this.x = x;
this.y = y;
this.z = z;
}
@Override // "_ip" stands for "in place"
public WritableCoord add_ip(double x, double y, double z)
{
this.x += x;
this.y += y;
this.z += z;
return this;
}
// --- snip ---
}
【问题讨论】: