【发布时间】:2019-02-12 05:31:54
【问题描述】:
在GoF设计模式一书中,说到观察者模式的实现部分,是这样说的:
将主体映射到它们的观察者 主体跟踪它应该跟踪的观察者的最简单方法 notify 是在主题中明确存储对它们的引用。然而,这样的存储可能过于昂贵 当主体多,观察者少时。一种解决方案是通过使用 关联查找(例如,哈希表)以维护主题到观察者的映射。因此一个没有 观察者不会产生存储开销。另一方面,这种方法增加了访问成本 观察者。
我看不到使用哈希表如何提高存储容量。在 Java 中,对于每个主题,我们都可以有一个观察者列表 List<Observer>。如果没有附加到此主题的观察者,则列表引用将为空。如果我们使用哈希表,Map<Subject, List<Observer>,我们仍然有列表,但我们也有一个对主题的引用,所以这种方式有点更多内存
效率低下。我不知道它是否相关,但Gof书中用于实现的语言是Smalltalk和C++。
【问题讨论】:
-
我同意它的神秘。请记住 GoF 是在 1994 年编写的,而 24 年对于计算机硬件/软件而言是一段很长的时间。那时PC内存也以MB而不是GB来衡量,所以小额节省可能很重要。您需要访问当时的 C++ 编译器和库,以进行空间比较。使用当今的 CPU 速度和内存,以及跨主要语言,para 可以安全地忽略 .. 除了大型网站速度优化将是一个因素。
标签: design-patterns observer-pattern observers