OBSERVER
该模式的动机是为了在增加新的观察对象时可以无需更改被观察的对象,被观察对象可以保持封闭。
public class Observable {
List<Observer> observers = new ArrayList<Observer>();
public boolean addObserver(Observer o) {
observers.add(o);
}
private void fireObserver() {
for (Observer o : observers) {
o.update();
}
}
}
Context是一个GUI应用程序的唯一上下文实例,用来和服务端交互信息。TaskView是用来显示当前系统的任务列表,它实现了Observer接口,通过Observable的addObserver方法注册到Context中。Context在收到服务端发出的更新命令时,就会调用observable的notify方法,notify方法会调用注册的Observer对象的update方法。执行TaskView的update方法时,TaskView会到到后台中取到所有的Task信息,显示在自己的界面上。
上面的例子是一个典型的拉模型,Observer的update被调用后,要自己去取得新的信息,可能的后果是无法分辨信息的实时性。下面的例子为fireObserver方法增加了一个Event参数,将最新的信息发送给Observer.Observer的派生类各自实现自己的业务功能。这是Observer模式的推模型。
UserView和EMSView本别用来现实用户和Ems的列表,它们实现了Observer接口,并注册到Context中,Context受到服务端发来的Event信息,就会调用注册其中Observer的update方法,UserView和EMSView通过update接受到了Event消息,分别实现自己的需求。
推模型比拉模型适应更复杂的情况。
分享到:
相关推荐
在实际应用中,例如,当我们开发一个实时数据显示系统,可以将数据源作为被观察者,而各种图表、日志记录器等视图组件作为观察者。数据源一旦有新的数据,就会通知所有观察者更新显示。这种设计使得我们可以在不修改...
2. **可扩展性**:添加新的Observer或修改现有Observer的行为都非常灵活,不会影响到其他部分。 3. **响应性**:通过实时更新,Observer模式能快速响应Subject的变化,提高系统的实时性。 在实际应用中,Observer...
而 `MailObserver.java` 和 `JMSObserver.java` 可能如下所示: ```java public class MailObserver implements Observer { @Override public void update() { // 实现发送邮件通知的逻辑 } } public class ...
当天气预报发生变化时,`concretesubject`会通知所有已注册的观察者,即`concreteobservera`和`concreteobserverb`,它们则根据新的预报信息更新自己的显示。 观察者模式的主要优点是解耦了对象之间的依赖,使得...
在Android开发中,Observer模式是一种常见的设计模式,用于实现对象之间的通信和状态更新。Observer模式的核心思想是"一对多"的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。...
在C++中,Observer可以是一个抽象基类,而在MFC中,可能会使用CObject派生类。 3. **通知机制**:当主题的状态发生变化时,它会调用一个方法(如`Notify()`)来通知所有的观察者。这个过程通常涉及遍历观察者列表,...
通过定义抽象的 `Subject` 和 `Observer` 类,可以很容易地扩展新的被观察者和观察者类型。此外,通过将观察者添加到被观察者列表中,并在被观察者状态变化时通知观察者,可以实现动态地更新观察者的状态,从而提高...
`Decorator`模式是另一个设计模式,它允许我们向一个现有的对象动态地添加新的行为或责任,而不会破坏封装。在Observer的例子中,`Decorator`模式可能用来扩展或修改`Subject`或`Observer`的行为,如添加日志记录、...
Observer更适用于需要实时同步更新的场景,而Reactor更适合于需要高效处理并发事件的系统,尤其是在实时系统和嵌入式系统中。 在选择使用哪种模式时,开发者需要考虑系统的性能需求、扩展性、可维护性以及资源限制...
"C++ Observer"实现是面向对象编程中的一种经典设计模式,主要用于建立一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这篇博文通过链接深入探讨了C++中...
- **可扩展性**:容易添加新的观察者,且不影响现有观察者的行为。 - **实时性**:状态变化可以实时地传递给所有关心的观察者。 在实际应用中,观察者模式可以用于多种场景,如GUI组件的事件处理、订阅发布系统、多...
在多年的图像处理工作中, 深感有必要自己开发一个开发一个集图像的显示, 变换, 各种处理分析测试的工具平台, 这就是Observer. 取名为Observer, 是因为我觉得图像的处理与分析依赖于对图像的细致观察. Observer的...
`Observable`类代表被观察的对象,而`Observer`接口则表示观察者。下面我们将深入探讨这两个关键组件以及如何使用它们。 1. **`Observable`类**: - `Observable`类提供了一种方式来维护一个观察者列表,当对象...
在上面的代码中,`MyObservable`类实现了观察者模式的核心功能,而`MyObserver`接口定义了观察者需要实现的方法。`setState()`方法改变了`MyObservable`的状态并通知所有观察者。`MyObserver`的实现可以根据具体需求...
这种模式提高了代码的灵活性,使得系统更易于扩展,因为增加新的观察者或者改变观察者的行为只需要修改相关的类,而不会影响到其他部分。同时,它也支持广播机制,一个主题可以有多个观察者,使得信息传播更为高效。...
而观察者根据接收到的新状态进行相应的操作。 ```cpp class ConcreteSubject : public Subject { private: int state; std::vector<Observer*> observers; public: // ... void setState(int newState) { ...
Observer<String> observer = new Observer() { @Override public void onChanged(String newData) { // 更新UI或执行其他操作 } }; liveData.observe(this, observer); ``` 2. **ViewModel与Activity/Fragment...
意法半导体公司关于电机控制器的源代码程序,此为其中的观测器源代码
这样,我们可以编写代码来处理模型生命周期中的特定阶段,而无需在每个控制器方法中重复这些逻辑。 `artisan observer maker`命令的使用方法是: ```bash php artisan make:observer ObserverName --model=Model...
6. **扩展与变体**:除了基本的观察者模式,还有发布-订阅(Publish-Subscribe)模式,它允许观察者订阅特定类型的事件,而不是具体某个主题,增加了灵活性。 在实际编程中,理解并熟练应用观察者模式,可以帮助...