【发布时间】:2010-03-19 07:22:51
【问题描述】:
在第 143 页的The Pragmatic Programmer 中有一个代码 sn-p:
public class Colada {
private Blender myBlender;
private Vector myStuff;
public Colada() {
myBlender = new Blender();
myStuff = new Vector();
}
private doSomething() {
myBlender.addIngredients(myStuff.elements());
}
}
这符合得墨忒耳定律/最少知识原则。
使用依赖注入替换它是否更可取,是否有任何警告?
public class Colada throws IllegalArgumentException {
private Blender myBlender;
private Vector myStuff;
public Colada(Blender blender, Vector stuff) {
if (null == blender) {
throw new IllegalArgumentException()
} else {
myBlender = blender;
}
if (null == stuff) {
throw new IllegalArgumentException()
} else {
myStuff = stuff;
}
}
public static Colada createDefaultInstance() {
Blender blender = new Blender();
Vector stuff = new Vector();
return new Colada(blender, stuff);
}
private doSomething() {
myBlender.addIngredients(myStuff.elements());
}
}
【问题讨论】:
-
这不是滥用
?:吗?你不觉得写成 if-else 语句会更易读吗? -
称为
getInstance的方法通常与单例有关。我认为createDefaultInstance更合适。干杯 -
我喜欢 IllegalArgumetnExceptions 在 if 中单独存在,而不在 else 中。更好地显示意图。
标签: java dependency-injection law-of-demeter