Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个类所需依赖项的设计模式(java)_Java_Design Patterns - Fatal编程技术网

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

多个类所需依赖项的设计模式(java),java,design-patterns,Java,Design Patterns,我正在编写java代码,我有很多类依赖于两个类,比如D1和D2 我创建了其他类(A1、B1…Z1)来拥有一个构造函数,该构造函数将接受D1和D2的实例,因此满足了依赖性要求。后来我用弹簧给它们接线 布线发生在另一个maven项目中,我不想在这个maven项目中向Spring引入任何耦合,因此我不使用@Autowired注释 然而,我的问题是,我不确定我设计A1到Z1类的方式是否正确(每个类都有相同类型的构造函数,非常重复) 有没有一种设计模式在这里派上用场 如果有很多类需要依赖,比如D3、D4等

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

我创建了其他类(A1、B1…Z1)来拥有一个构造函数,该构造函数将接受D1和D2的实例,因此满足了依赖性要求。后来我用弹簧给它们接线

布线发生在另一个maven项目中,我不想在这个maven项目中向Spring引入任何耦合,因此我不使用
@Autowired
注释

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

有没有一种设计模式在这里派上用场


如果有很多类需要依赖,比如D3、D4等等,那么有人会如何设计它呢?

我不想阻止您使用良好的面向对象实践和高效的设计模式,但如果您已经觉得有意义的话,请不要让事情过于复杂化。您也不必尝试遵循设计模式(您不必为了使用模式而在某些事情上寻找设计模式)

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

至于最后一个问题,如果D1…Dn都是相关的,那么如果要传递大量依赖的类,那么可以有一个超级类或实现和接口,比如reliable(在您解释它的情况下)作为数组或列表传递给构造函数


编辑:我只是想发表评论,抱歉,这是我的第一篇文章。

我不想阻止你使用良好的面向对象实践和有效使用设计模式,但如果你已经觉得有意义的话,不要让事情过于复杂化。您也不必尝试遵循设计模式(您不必为了使用模式而在某些事情上寻找设计模式)

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

至于最后一个问题,如果D1…Dn都是相关的,那么如果要传递大量依赖的类,那么可以有一个超级类或实现和接口,比如reliable(在您解释它的情况下)作为数组或列表传递给构造函数


编辑:只是想发表评论,抱歉,这是我的第一篇帖子。

您说过要使用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()); }
protectedinitializeinstance(T inst){
仪表组1(d1);
仪器设置d2(d2);
返回仪表;
}
public A1 createA1{return initializeInstance(new A1());}
公共B1 createB1{return initializeInstance(new B1());}
//等等

甚至只是

public <T extends AbstractPage> createInstance(Class<T> clazz) {
    initializeInstance(clazz.newInstance());
}
publicCreateInstance(类clazz){
初始化Instance(clazz.newInstance());
}

您说过要使用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()); }
protectedinitializeinstance(T inst){
仪表组1(d1);
仪器设置d2(d2);
返回仪表;
}
public A1 createA1{return initializeInstance(new A1());}
公共B1 createB1{return initializeInstance(new B1());}
//等等

甚至只是

public <T extends AbstractPage> createInstance(Class<T> clazz) {
    initializeInstance(clazz.newInstance());
}
publicCreateInstance(类clazz){
初始化Instance(clazz.newInstance());
}

如果它有意义(尽管我对此表示怀疑),您可以创建一个公共基类。否则我看不到更好的方法。这些类相关吗?那么它们都可以扩展一个初始抽象类?所有的类A1,B1…Z1都有一个共同的用途吗。它们到底是什么?那么这些类A1。。Z1是所有页面类,用于在我使用SeleniumWebDriver测试的应用程序中建模页面。在某种程度上,它们是相关的,可以从抽象页面或其他东西继承。然而,当我创建所有页面类的实例时,我仍然需要调用方法来设置D1和D2。。。等等。我认为使用构造函数来强制页面类获取依赖项是一种更好的方法。如果这有意义(尽管我怀疑),您可以创建一个公共基类。否则我看不到更好的方法。这些类相关吗?所以它们都可以扩展一个初始抽象类?所有的类A1,B1…Z1