首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实用程序员的练习26

实用程序员的练习26
EN

Stack Overflow用户
提问于 2010-03-19 07:22:51
回答 2查看 443关注 0票数 4

在第143页的中有一个代码片段,如下所示:

代码语言:javascript
复制
public class Colada {
    private Blender myBlender;
    private Vector myStuff;

    public Colada() {
        myBlender = new Blender();
        myStuff = new Vector();
    }
    private doSomething() {
        myBlender.addIngredients(myStuff.elements());
    }
}

这符合德米特定律/知识最少的原则。

它是否比使用依赖注入来代替它更可取,并且是否有任何警告呢?

代码语言:javascript
复制
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());
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-19 08:12:23

如何构造对象的创建与它公开的API不同。

德米特定律说的是类的API,而不是它们是如何构造的,所以我认为构造器注入和Demeter法则之间没有冲突。

也就是说,一旦您决定使用依赖项注入,在创建对象时,您应该小心地避免不明确的。如果继续提供无参数构造函数或静态工厂方法,人们可能会使用此方法,而不是让外部调用者组成依赖关系层次结构。

每当开发人员意外地使用工厂方法(或无参数构造函数)破坏依赖层次结构时,他们就会引入一个紧耦合。当您决定使用DI时,您可以最好地从这样做中获得好处。

票数 4
EN

Stack Overflow用户

发布于 2010-03-19 07:41:21

公共getInstance(),不应该是“公共静态Colada getInstance()”吗?

这两者在我的世界都很好,第一个更易读,第二个更动态。但是它们都没有说明myBlender和myStuff是属性,因此很难理解为什么您更喜欢动态的。但如果这是你想要的,看上去没问题。但是,与getInstance不同,我只创建了两个构造函数,一个没有像第一个示例那样的参数,另一个像第二个

干杯

耐克

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2475589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档