0

我有一堂课如下:

public UIManager{

    private UIInstructor uiInstructor;
    private MOdel model;


}

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

我的问题是:如果 UIInstructor 想要使用 UIManager 的一些实例变量(例如:模型对象),让“UIInstructor”存储对 UIManager 的引用是一个好的设计实践吗?

或者我们是否需要改变设计以使“UIInstructor”不应该“依赖” UIManager 的任何操作?

4

2 回答 2

0

在这种情况下,第一个尝试的解决方案是让对象传递对toUIManager的引用。一般来说,避免不需要的依赖项是一个好主意,尤其是循环依赖项。modeluiInstructor

本着减少依赖的精神,您可能需要考虑是否真的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

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

于 2013-04-25T09:10:32.943 回答
0

在 UIInstructor 中添加对 UImanager 的引用会创建循环依赖,这不好。

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

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

于 2013-04-25T06:34:00.377 回答