0

我正在编写相当大而复杂的应用程序,所以我想坚持设计模式以保持代码质量。我对一个几乎所有其他实例都可用的实例有疑问。

假设我有 BusMonitor 实例(用于记录消息的类)和其他使用此实例记录操作的实例,例如 Reactor,它解析来自网络协议的传入帧并根据帧记录不同的消息。

我有一个创建 BusMonitor、Reactor 和更多实例的主要实例。现在我希望 Reactor 能够使用 BusMonitor 实例,我该如何根据设计模式来做到这一点?

将它设置为 Reactor 的变量对我来说似乎很难看: self._reactor.set_busmonitor(self._busmonitor)

对于每个需要访问 BusMonitor 的实例,我都会这样做。导入这个实例似乎更糟。

尽管我可以将 BusMonitor 设为 Singleton,但我的意思不是作为 Class,而是作为 Module,然后导入此模块,但我想将内容保留在类中以保持一致性。

什么方法是最好的?

4

3 回答 3

3

我想把东西放在课堂上以保持一致性

为什么?为什么一致性很重要(除了成为一个小精灵)?

在有意义的地方使用类。在不使用的地方使用模块。Python 中的类实际上是用于封装数据和保留状态。如果您不做这些事情,请不要使用课程。否则,您就是在与语言作斗争。

于 2012-07-06T12:39:56.763 回答
1

由于您已经有了层次结构,因此可以使用链来获取它。这不是责任链模式,但想法是相似的。

每个小部件都有一个getbusmonitor调用,它return self.parent().getbusmonitor()适用于除根部件之外的所有小部件。你也可以缓存结果..

于 2012-07-06T13:17:36.743 回答
0

我找到了我认为的好方法。我用 BusMonitor 类制作了模块,在同一个模块中,在类定义之后,我制作了这个类的实例。现在我可以从项目中的任何地方导入它,并使用类和封装保持一致性。

于 2012-07-13T12:58:44.137 回答