这是Java中很好的类设计实践吗?
在上面的代码中,另一个类被实例化并作为OneClass的类变量保存 这种设计的后果是什么? 这是一种好的做法吗? 这会支持单元测试吗?这是Java中很好的类设计实践吗?,java,design-patterns,Java,Design Patterns,在上面的代码中,另一个类被实例化并作为OneClass的类变量保存 这种设计的后果是什么? 这是一种好的做法吗? 这会支持单元测试吗? 很难进行单元测试,因为您无法以正常的方式模拟外部依赖关系。例如,使用groovy测试,您可以使用模拟覆盖私有字段 我认为最好有一个接受另一个类的构造函数,而不是通过构造函数在单元测试中模拟它。这称为组合,是Java语言的基本部分。它没有什么问题,在很多情况下可能是必不可少的 我要做的唯一更改是使用依赖项注入来简化测试,也就是说,您可以通过以下方式提供另一个模拟类
很难进行单元测试,因为您无法以正常的方式模拟外部依赖关系。例如,使用groovy测试,您可以使用模拟覆盖私有字段 我认为最好有一个接受另一个类的构造函数,而不是通过构造函数在单元测试中模拟它。这称为组合,是Java语言的基本部分。它没有什么问题,在很多情况下可能是必不可少的 我要做的唯一更改是使用依赖项注入来简化测试,也就是说,您可以通过以下方式提供另一个模拟类对象:-
public class OneClass {
private AnotherClass anotherClass = new AnotherClass();
private void doOneJob(){
anotherClass.doOtherJob();
}
}
你是说适配器模式吗?是的。依赖注入看起来不错。但是,我在AnotherClass.java中有一个本机lib调用。如果我能成功地模拟AnotherClass.java,我想依赖项注入会处理这个本机库。是的,本机方法可以像其他方法一样被重写,除非它们是final。您应该创建一个接口,并在实现类中提供此方法的单独实现。更具体地说,模式可以是组合模式,也可以是聚合模式,具体取决于innerObj。仅存在于包装器对象内部,甚至作为独立对象存在于外部
public class OneClass {
private AnotherClass anotherClass;
public OneClass(AnotherClass anotherClass){
this.anotherClass = anotherClass;
}
private void doOneJob() {
anotherClass.doOtherJob();
}
}