我正在编写java代码,我有很多类依赖于两个类Say D1和D2
我创建了其他类(A1,B1 ... Z1)以具有一个构造函数,它将接受D1和D2的实例,从而满足依赖性要求。后来我使用Spring连接它们。
接线发生在一个不同的maven项目中,我不想在这个maven项目中引入任何与Spring的耦合,所以我没有使用@Autowired
注释。
但是我的问题是我不确定我设计A1到Z1类的方式是否正确(每个都有相同类型的构造函数,非常重复)
这里有一个方便的设计模式吗?
如果有很多类依赖于说D3,D4等,有人会如何设计?
答案 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());
}