多个类所需的依赖项的设计模式(java)

时间:2014-12-25 23:59:55

标签: java design-patterns

我正在编写java代码,我有很多类依赖于两个类Say D1和D2

我创建了其他类(A1,B1 ... Z1)以具有一个构造函数,它将接受D1和D2的实例,从而满足依赖性要求。后来我使用Spring连接它们。

接线发生在一个不同的maven项目中,我不想在这个maven项目中引入任何与Spring的耦合,所以我没有使用@Autowired注释。

但是我的问题是我不确定我设计A1到Z1类的方式是否正确(每个都有相同类型的构造函数,非常重复)

这里有一个方便的设计模式吗?

如果有很多类依赖于说D3,D4等,有人会如何设计?

2 个答案:

答案 0 :(得分:2)

我不想阻止你使用良好的面向对象的练习和有效使用设计模式,但如果它已经对你有意义,不要过分复杂化。您也不必尝试遵循设计模式(您不会在寻找设计模式的事情上进行操作,以便您使用模式)。

如果A1 IS-A B1 IS-A .... Z1当然会创建一个超类,但是为了使用设计模式,再次不要搜索设计模式。

至于最后一个问题,如果D1 ... Dn都是相关的,你可以有一个超类或实现和接口,比如Dependable(在你解释它的情况下)传递给构造函数如果你传递了许多这些依赖的类,那么就是一个数组或列表。

编辑:只是评论,对不起,这是我的第一篇文章。

答案 1 :(得分:2)

你说过要用spring连接依赖项。如果是这种情况,那么使用setter没有任何缺点,您在评论中提到的内容不适用,因为您不会明确创建实例并且不需要初始化它们。

因此,如果您的类将与spring一起使用,我建议您创建一个基类,其中包含对依赖项的引用,使用默认构造函数,setD1()setD2()等。这样,您将没有重复的代码。

否则,如果你打算在spring之外明确地实例化你的类,那么你是对的,通过构造函数参数进行初始化可能比setter更少痛苦。

或者,如果不使用spring,请考虑使用工厂方法,保存依赖项实例:

protected <T extends AbstractPage> initializeInstance(T inst) { 
   inst.setD1(d1);
   inst.setD2(d2);
   return inst;
}
public A1 createA1 { return initializeInstance(new A1()); }
public B1 createB1 { return initializeInstance(new B1()); }

//等

甚至只是

public <T extends AbstractPage> createInstance(Class<T> clazz) {
    initializeInstance(clazz.newInstance());
}