The Pragmatic Programmer の143 ページに次のようなコード スニペットがあります。
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());
}
}