在我的项目中有一个文档管理系统。有底座Document
类和一些派生类。还有一个DocumentManager
管理文档的打开/关闭/激活操作的类。
Document
及其派生类可能想要在加载、关闭等时执行某些操作,但状态更改由管理器类控制,因此目前有(虚拟)方法,如 OnLoaded()
, OnClosed()
关于Document
由 DocumentManager
调用的类类(class)。它工作得很好,只是将这些方法公开给公众似乎没有必要。
另一种设计是制作 DocumentManager
类触发事件和每个Document
实例订阅这些事件。恕我直言,这并没有多大区别,但会带来内存泄漏的风险。
我有一种直觉,这些都不是“解决方案”,并且有适合该问题的最佳实践。有人可以启发我吗?
最佳答案
我的直觉是,尽管在不知道项目的具体要求的情况下很难确定,但您的 DocumentManager
类中已经有了逻辑,它可能应该位于以下子类中:您的 Document
类。
我会想象一个(可能是抽象的)Document
基类,具有公共(public)load
、close
和whatever
方法。每个子类都会根据其特定要求实现这些方法,使您可以轻松创建任意数量的 Document
子类,而无需更改 DocumentManager
中的逻辑(参见 polymorphism )。如果这些操作是异步的,您的 Document
类将调度事件来通知 DocumentManager
它们已完成。
这将使 DocumentManager
带有 single responsibility管理(我假设)它的 Document
实例集合。
关于oop - FooManager 调用 Foo.OnSthHappened() 是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961179/