oop - FooManager 调用 Foo.OnSthHappened() 是一种不好的做法吗?

标签 oop events design-patterns inheritance

在我的项目中有一个文档管理系统。有底座Document类和一些派生类。还有一个DocumentManager管理文档的打开/关闭/激活操作的类。

Document及其派生类可能想要在加载、关闭等时执行某些操作,但状态更改由管理器类控制,因此目前有(虚拟)方法,如 OnLoaded() , OnClosed()关于DocumentDocumentManager 调用的类类(class)。它工作得很好,只是将这些方法公开给公众似乎没有必要。

另一种设计是制作 DocumentManager类触发事件和每个Document实例订阅这些事件。恕我直言,这并没有多大区别,但会带来内存泄漏的风险。

我有一种直觉,这些都不是“解决方案”,并且有适合该问题的最佳实践。有人可以启发我吗?

最佳答案

我的直觉是,尽管在不知道项目的具体要求的情况下很难确定,但您的 DocumentManager 类中已经有了逻辑,它可能应该位于以下子类中:您的 Document 类。

我会想象一个(可能是抽象的)Document基类,具有公共(public)loadclosewhatever方法。每个子类都会根据其特定要求实现这些方法,使您可以轻松创建任意数量的 Document 子类,而无需更改 DocumentManager 中的逻辑(参见 polymorphism )。如果这些操作是异步的,您的 Document 类将调度事件来通知 DocumentManager 它们已完成。

这将使 DocumentManager 带有 single responsibility管理(我假设)它的 Document 实例集合。

关于oop - FooManager 调用 Foo.OnSthHappened() 是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961179/

相关文章:

java - 在 Javafx 中,mouseReleased 事件是否总是在 mouseClicked 之前发生?

gwt - gwt点击事件文档

java - 接口(interface)方法对所有实现类都没有意义

javascript - 如何在javascript中创建带有连接的变量?

c++ - 类不是类模板

java - 实例化接口(interface)对象 - 如何?

windows - python/pyqt - 将 CancelEvent 传递给 C++ 函数

python - 当 child 不能继承时如何创建基类?

java - 何时使用正确版本的单例线程安全实现?

oop - 初学者 OOP 问题