我尽可能多地阅读有关观察者模式的内容,但我未能完全理解它将在何时/何时使用。任何人都可以向我解释这个吗?
答案 0 :(得分:2)
将其视为发布者/订阅者模型。
一个例子是股票
当股票对象(主题)的价格更新时,任何订购此股票的“投资者”(观察员)都会收到更新价格的通知
答案 1 :(得分:0)
Observer用于需要在发生更改时通知代码的不同组件的情况。我想到了基于事件的系统。通常在基于事件的系统中,当您注册处理程序时,您使用的任何框架都将使用观察器实现在事件触发时通知处理程序。
我看到它使用的一个领域是Sproutcore框架。该框架具有称为“键值观察”的功能。基本上,您可以在对象的字段上设置观察者,并且当该字段值更改时,观察者会自动触发。这是有利的,因为,例如,如果视图元素在父视图的布局上具有观察者,则当事物被调整大小时,视图可以重绘自身。或者,假设一个值发生变化,您需要重新计算其他一些值,在初始值上设置观察者,然后从观察者那里进行重新计算。
答案 2 :(得分:0)
An时使用Observer pattern 对象需要通知其他对象 如果它改变了。所以观察者模式 具有
1)主题或来源:任何 行动将会发生。
2)一个或多个观察者:来源 如果有任何变化,需要通知 发生了。
这是关于此的好文章:
答案 3 :(得分:0)
我想一个例子会说清楚:假设您正在从套接字接收数据,并希望在某些数据到达时收到通知。因此,您向正在接收数据的类注册观察者。一旦数据到来,将调用您的观察者的特定方法,您可以在其中采取适当的操作来处理数据。
答案 4 :(得分:0)
当许多观察者需要知道某个对象中的状态变化时,使用观察者模式。例如,它可以用在GUI中,您希望在其他组件发生更改时“自动”更改多个组件。
因此,假设您有一个复选框,并且根据状态(已选中或未选中),您希望其他组件可见或不可见。其他组件的数量可以是可变的。因此,您希望他们使用复选框注册所有自己。然后,该复选框会通知每个观察者用户单击时发生了更改,并且他们可以决定如何对该更改做出反应。因此,他们如何反应的逻辑在于观察者。复选框不需要知道他们做了什么。