OOD问题使用组合

时间:2013-04-25 06:23:32

标签: oop

我有一个课程如下:

public UIManager{

    private UIInstructor uiInstructor;
    private MOdel model;


}

UIManager将他的一些任务委托给UIInstructor。

我的问题是:如果UIInstructor想要使用UIManager的一些实例变量(例如:Model对象),是不是 有“UIInstructor”商店参考UIManager的好设计实践?

或者我们是否需要设计这样的设计,以便“UIInstructor”不应该“依赖”UIManager的任何操作?

2 个答案:

答案 0 :(得分:0)

在UIInstructor中添加一个UImanager的引用将创建一个循环依赖,这是不好的。

理想情况下,构成新类的字段不应取决于这个新类。

因此,设计使得“UIInstructor”不应该“依赖”UIManager的任何操作。

答案 1 :(得分:0)

在这种情况下,尝试的第一个解决方案是让UIManager对象将对model的引用传递给uiInstructor。一般来说,最好避免使用不需要的依赖项,特别是循环依赖项。

本着减少依赖关系的精神,您可能需要考虑uiInstructor是否应该真正看到model所有。因此,您可能拥有以下Model课程:

class Model
{
    private InstructorModel instructorModel;
    private StudentModel studentModel;
}

你可以想象我们可能会添加给你的经理,所以它也显示了一个学生

class UIManager{
    private UIInstructor uiInstructor;
    private UIStudent uiStudent;
    private Model model;
}

然后UIManager通过model.instructorModel来初始化uiInstructor,通常是通过构造函数。并通过model.studentModel初始化uiStudent

这些只是一些想法。有许多不同的做事方式,但一个好的经验法则是安排每个班级只“看到”它需要的东西。