【发布时间】:2015-04-25 18:22:35
【问题描述】:
我已经编写 Java 快一年了,我已经看到了 2 种不同的约定来说明人们如何实现他们的 setter。
为了说明这一点,以下是两种约定的示例。 (我也很想知道这两种模式的简明名称)
使用第一个约定的类,从它们的“设置”方法中不返回任何内容。像这样:
public class Classic{
private double _x;
private double _y;
public Classic(){
x = 0;
y = 0;
}
public void setX(double d){//or boolean with a type check on input
x = d;
}
public void sety(double d){
y = d;
}
}
使用替代约定的类从它们的 setter 方法返回自身。像这样:
public class Alternative{
private double _x;
private double _y;
public Alternative(){
x = 0;
y = 0;
}
public Alternative setX(double d){
x = d;
return(this);
}
public Alternative sety(double d){
y = d;
return(this);
}
}
不同之处在于使用替代方法语法,例如
Alternative NewAlt(double x,double y){
return(new Alternative()
.setX(x)
.setY(y));
}
有可能而使用经典设置,相同的工厂方法会 看起来像这样。
Classic NewAlt(double x,double y){
Classic temp = new Classic();
temp.setX(x);
temp.setY(x);
return(temp);
}
其中哪一个更具可读性/可用性值得商榷。
我的问题是关于这两种模式之间的性能差异。它存在吗?如果是这样,差异有多大,它来自哪里?
如果没有性能差异,哪一个被认为是“更好的实践”?
【问题讨论】:
-
Java 中没有“自我”。
-
@AniketThakur 确定吗?如果没有使用构建器,为什么这种情况称为
Builder pattern?据我所知,它“只是”"Fluent API"。 -
@kpie 当您将问题标记为 Java 时,请确保它使用标准 Java 编译器进行编译。你在这里已经有一段时间了。你知道该怎么做。这对你来说太懒了..
-
它不是构建器模式,而更像是 Tom 所说的 Fluent API。
-
@kpie
temp = new Classic();什么温度?我同意这是一个可以忽略的小缺陷,但在其他人指出之前,您的代码中也存在其他错误..
标签: java setter coding-style