我对我在学校看到的一些代码有点好奇,这是否是这个领域的常见做法或者只是糟糕的设计.
考虑以下接口和实现它的两个类......
public abstract interface Anchor
{
public abstract double x(double x);
public abstract double y(double y);
}
Run Code Online (Sandbox Code Playgroud)
请注意,在Cycle类中,实际使用x()和y()中的参数...
public class Cycle implements Anchor
{
public Anchor anchor;
public double radius;
public double period;
public double phase = 4.0D;
public Cycle(Anchor anchor, double radius, double period) {
this.anchor = anchor;
this.radius = radius;
this.period = period;
}
public double angle(double day) {
return this.phase * 3.141592653589793D * (day / this.period) / 2.0D;
}
public double x(double x) {
return this.anchor.x(x) + Math.cos(angle(x)) * this.radius;
}
public double y(double y) {
return this.anchor.y(y) + Math.sin(angle(x)) * this.radius;
}
}
Run Code Online (Sandbox Code Playgroud)
但是在Center类中,x()和y()中的参数仅用于实现与Anchor接口的联系,并且实际上并未在方法中使用...
public class Center implements Anchor
{
public double x;
public double y;
public Center(double x, double y) {
this.x = x;
this.y = y;
}
public double x(double x) { return this.x; }
public double y(double y) { return this.y; }
}
Run Code Online (Sandbox Code Playgroud)
这是生产java代码中常见的东西吗?这是一种公认的做法还是一项糟糕的工作?
adp*_*mbo 11
是的,这对所有OOP代码都很常见.
接口定义了一组可在实现该接口的任何对象上使用的方法.这些方法的实现是调用者不应该关心的,并且在接口中看到的某些参数不适用于某些实现并不罕见.
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |