我们都知道observer pattern:你有一个主题能够通知和更新其状态变化的观察者列表。现在假设您要观察的主题是一个容器,并且您希望观察容器本身,即元素的元素添加和删除,以及包含的元素,即容器元素的状态更新。
如何在容器中存储大量对象时,如何实现更新机制以便快速进行元素插入和删除?特别是,
如果您的容器是一个链接列表,那么您可以在常量时间插入元素。如果m个观察者必须遍历包含n个元素的列表,那么更新需要O(n * m)个预期时间。
如果你的容器是一个数组,那么更改一个元素需要一个恒定的时间,如果传递元素的索引,则更新m个观察者需要O(m),如果观察者必须迭代数组,则需要O(n * m)。 / p>
如果有帮助,请考虑以下示例:
示例1.您正在编写操作系统。您要观察的主题是文件系统及其文件。您的视图是文件资源管理器,索引器和其他应用程序。您希望在添加,删除或修改文件时更新观察者。
示例2.您正在编写一个地址簿应用程序,该应用程序应该能够处理纽约大小的城市。您要观察的主题是您的记录容器(一个人的地址,电话号码,电子邮件......)。您的观察者有几个视图,在添加,删除或修改记录时应自动更新。 (人们可以想象一个视图,其中包含居住在第53位的人员列表以及地图上为姓氏为Doe的每个人绘制的另一个点。)
如何处理删除完整目录子树或将“53rd St”重命名为“Dijkstra St”的情况?
答案 0 :(得分:4)
答案 1 :(得分:1)
为什么不观察者模式本身?
受试者需要告知观察者有趣的事件。然后观察员应将其发送给感兴趣的各方(订户)。
这个主题的性质没有任何意义。 (除非我理解你的问题不对。)