在将软件项目作为业余爱好工作时,我的进度在设计过程中多次减慢或完全停止。通常我会偶然发现我以前遇到过的相同问题。此类反复出现的问题之一是让对象知道它应该联系什么对象或拥有它的对象是什么:
假设我们有一个Corporation
名为的类的实例startup
,其中一个类Supervisor
对象和几个类Employee
对象工作。主管负责为员工分配任务,并在员工请求帮助时提供帮助。但是员工必须知道谁是他们的主管,才能报告他们已经完成了他们的任务,或者提出了一些要求。
问题是我如何让员工知道这位主管是谁?我想出了几个解决方案,但在我看来,没有一个是确定的答案。
- 使
Supervisor
实例全局可访问,并且所有人都Employees
直接调用该实例:避免全局变量通常是一个好主意,但这可能是一个例外吗?我认为不会,而且如果startup
发展到拥有一名以上的经理,就会出现问题。 - 向班级添加
static Supervisor *supervisor
成员:这避免了使用全局访问和与全局访问相关的问题,但保留了在增长Employee
时无法让员工向不同经理报告的问题。startup
- 向类中添加一个
Supervisor *supervisor
成员Employee
,并将Supervisor
指向每个成员的指针Employee
作为员工构造函数的参数传递:非常灵活,但在Employee
没有很多成员变量时内存使用效率低下。 - 在可能需要知道谁是成员函数
Supervisor
的每次调用中将指针作为参数传递:最灵活,但可能比解决方案 3 效率更低,并且几乎所有成员函数都需要主管参数,从而导致额外的开销和不必要的依赖。Employee
Employee
supervisor
Employee
使用单个非类型参数制作类模板Supervisor *S
:这与解决方案 1 或 2 一样有效,但更加灵活。startup
然而,虽然可以在运行时更改员工数量,但在运行时添加更多主管startup
是不可能的,除非在编译时创建额外的主管但保持不活动状态。此外,我不知道如何创建一个复制构造函数,它将一个不同但相似的(模板创建的)类型的员工作为参数。