在第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());
}
}发布于 2010-03-19 08:12:23
如何构造对象的创建与它公开的API不同。
德米特定律说的是类的API,而不是它们是如何构造的,所以我认为构造器注入和Demeter法则之间没有冲突。
也就是说,一旦您决定使用依赖项注入,在创建对象时,您应该小心地避免不明确的。如果继续提供无参数构造函数或静态工厂方法,人们可能会使用此方法,而不是让外部调用者组成依赖关系层次结构。
每当开发人员意外地使用工厂方法(或无参数构造函数)破坏依赖层次结构时,他们就会引入一个紧耦合。当您决定使用DI时,您可以最好地从这样做中获得好处。
发布于 2010-03-19 07:41:21
公共getInstance(),不应该是“公共静态Colada getInstance()”吗?
这两者在我的世界都很好,第一个更易读,第二个更动态。但是它们都没有说明myBlender和myStuff是属性,因此很难理解为什么您更喜欢动态的。但如果这是你想要的,看上去没问题。但是,与getInstance不同,我只创建了两个构造函数,一个没有像第一个示例那样的参数,另一个像第二个
干杯
耐克
https://stackoverflow.com/questions/2475589
复制相似问题