【发布时间】:2012-05-05 08:04:10
【问题描述】:
我有两个班级:
public class CourseModule {
// attributes...
List<Course> courses;
public void addCourse() { ... }
}
public class Course {
// attributes...
CourseModule module;
}
Course 的属性不足以唯一地标识一个对象,课程模块始终是必需的,对于附加信息也是如此。 CourseModule 由差异 Courses 组成。
这里我不喜欢的是循环依赖,感觉不对。现在我正在考虑以下内容,而不是为每个方法添加课程并手动设置 CourseModule 引用,我可以使用构造函数自动执行此过程:
public Course(...,...,...., CourseModule module) {
this.module = module;
module.courses.add(this);
}
但是,这里还有另一个大问题:在 Brian Goetz Java Concurrency in Practice 中说:不要让 this 引用转义构造函数
那么这里的最佳做法是什么?我认为这是一个非常简单的示例,可能会产生示例解决方案。
【问题讨论】:
-
课程是否需要知道其 CourseModule?
-
模块中的
courses.add(new Cource(..., this))怎么样?您正在设置的是双向父子(或容器-容器)关系。
标签: java oop circular-dependency