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