【发布时间】:2011-12-17 12:48:55
【问题描述】:
在下面的场景中,除了友谊还有其他选择吗?
我有一个代表 UI 窗口的 Window 类。此外,作为单例实现的WindowManager 类管理我的应用程序中的所有窗口对象(呈现 UI、调度事件等)
WindowManager 将有一个公共接口,仅由其单例实例化方法和函数组成,用于呈现 UI 和调度 UI 事件。
我还希望Window 对象在构造期间向WindowManager 注册,并在销毁期间取消注册。 WindowManager::register 和 WindowManager::deregister 方法将是私有的或受保护的,因为我不希望客户端(Window 对象除外)能够使用此接口。
在这种情况下,有没有办法避免Window 和WindowManager 之间的友谊?也许用完全不同的方式来获得类似的结果?
【问题讨论】:
-
有什么理由不希望 Window 和 WindowManager 成为朋友吗?是不是他们都曾经和同一个女孩约会,所以现在太尴尬了?
-
:)) 不,但作为一个初级 C++ 程序员,我可能正在努力避免耦合,即使我不应该这样做。
-
最好停下来问自己一些问题,例如“将这两件事结合在一起真的有好处吗?”或者“我可以在不牺牲清晰度或性能的情况下以一种它们之间的依赖较少的方式构建这两个部分吗?”但如果要存在依赖关系,最好以最清晰、最干净和最直接的方式完成该依赖关系。查看一个类并立即知道它与哪些其他类相关,这比查看它并且必须通过查看一些细微的东西来尝试找出复杂的连接要好得多。
标签: c++ encapsulation friend access-control