今天这个模式,也是面试的时候问到的。其实这个模式最好理解。
观察者,与被观察的物体,订阅者,与被订阅(发布)者。
着这个模式下,我们实现了一对多的一个机制,并且可以针对对感兴趣的事情做订阅,或者观察,一旦有内容就自动通知。生活中这样的例子太多。在java中,也自带这个模式。我们还是先看看这个模式的UML:
一个订阅,一个发布,实际上很清晰明了。现在举个例子吧。天气预报吧。
每天都有气象局发布天气预报,而我们总不能天天打电话问吧,那就好好订阅一个天气服务吧,他会自动给你报。
首先,定义一个可被观察的对象。Oberservable,天气是可以被观察的吧。
public interface WeatherServiceInterface {
public void subscribeWeatherService(Observer obs);
public void unsubscribeWeatherService(Observer obs);
public void notifyObserver(Object obj);
}
这个类名字长了点。不过方便我们读懂。呵呵。这个接口,提供给可以被订阅的天气。
现在实现一个可以报告温度的天气吧。
public class WeatherServiceImpl implements WeatherServiceInterface {
public List<Observer> observers;
public float temprature;
public float getTemprature() {
return temprature;
}
public void setTemprature(float temprature) {
if(this.temprature != temprature){
this.temprature = temprature;
this.notifyObserver(this);
}
}
public WeatherServiceImpl(){
this.observers = new ArrayList<Observer>();
}
@Override
public void subscribeWeatherService(Observer obs) {
// TODO Auto-generated method stub
observers.add(obs);
}
@Override
public void unsubscribeWeatherService(Observer obs) {
// TODO Auto-generated method stub
observers.remove(obs);
}
@Override
public void notifyObserver(Object obj) {
// TODO Auto-generated method stub
for(Observer obs:observers){
obs.update(obj);
}
}
}
非常的清晰。根据接口,我们的实现也非常简洁。在设置温度的时候,如果温度发生了改变,将通知所有注册的观察者。
现在我们来看看观察者:
public interface Observer {
public void update(Object obj);
}
一个观察者,需要提供一个接口,让被观察者调用。实现更新。
现在我们有个数据模型,需要根据温度改变而改变他的数据。
public class WeatherModel implements Observer{
public String name;
public float temprature;
public WeatherModel(String name){
this.name = name;
}
@Override
public void update(Object obj) {
// TODO Auto-generated method stub
temprature =((WeatherServiceImpl)obj).getTemprature();
System.out.println(name + " update temprature to : "+ temprature);
}
}
这里加入一个name,以便区分不同的订阅者。测试一下:
public class Test {
public static void main(String [] args){
WeatherServiceImpl wsi = new WeatherServiceImpl();
Observer obs1 = new WeatherModel("lily");
Observer obs2 = new WeatherModel("lucy");
wsi.subscribeWeatherService(obs1);
wsi.subscribeWeatherService(obs2);
wsi.setTemprature(20F);
try{
Thread.sleep(2);
}catch(InterruptedException e){}
wsi.setTemprature(22.30F);
}
}
结果:
lily update temprature to : 20.0
lucy update temprature to : 20.0
lily update temprature to : 22.3
lucy update temprature to : 22.3
每一个观察者都得到了及时更新数据。
在这个模式下,更新与否,以及更新的频率都交由被观察的对象决定。
- 大小: 5.5 KB
分享到:
相关推荐
Observer设计模式,也被称为“发布-订阅”(Publish-Subscribe)模式或“依赖倒置”模式,是软件设计中的一种行为模式。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到...
当一个对象的改变同时会影响其他对象的行为的时候,可以使用此设计模式。 l 主题对象 :一个需要被关注的主题对象,这个主题对象改变会影响其他对象的行为 l 订阅对象:当主题对象发生改变,订阅对象需要相应处理...
观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C#编程中广泛应用于实时系统、事件处理和状态管理等领域。 在...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在软件开发中广泛应用于事件驱动...
观察者设计模式观察者<Observer>模式(有时又被称为发布-订阅<Publish/Subscribe>模式、模型-视图<Model/View>模式、源-收听者<Source/Listener>模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标...
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...
观察者模式(Observer Pattern)是行为设计模式的一种,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这一模式在Java中得到了很好的实现,Java的`...
本资料“设计模式(英文版)”以.htm格式提供,意味着它可能是一个网页文档或者一组相互关联的HTML页面,用于详细阐述设计模式的理论和应用。 设计模式通常分为三类:创建型模式、结构型模式和行为型模式。创建型模式...
Observer模式,也称为发布-订阅(Publish/Subscribe)模式,是一种行为设计模式,它允许对象在状态发生改变时通知其他对象,而无需显示地指定这些对象。在Java中,Observer模式通过`java.util.Observable`和`java....
这个模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在本文中,我们将深入探讨观察者模式的概念、工作原理以及如何在实际编程中应用。 **观察者模式...
观察者设计模式是一种软件设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在IT行业中广泛应用,特别是在事件驱动编程、用户界面组件...
这个模式是基于发布-订阅(Publish/Subscribe)原则,允许我们定义一个订阅机制来监听对象的变化。 在观察者模式中,有两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它可以是任何可以...
这个模式是基于发布-订阅(Publish/Subscribe)模式的一个抽象,是事件驱动编程的一个关键实现方式。 在观察者模式中,有两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它可以是任何...
"Observer"模式是其中的一种行为设计模式,它定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在这个"Observer例子"中,我们将探讨如何在实际编程中应用...
工厂模式是一种创建型设计模式,它定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法把实例化操作推迟到子类中进行。 #### 3. 观察者模式(Observer) 观察者模式是一种对象行为型设计模式。它...
22. 观察者-发布/订阅模式组合(Observer-Publish/Subscribe):发布/订阅模式是观察者模式的一种扩展,允许多对多的关系。 23. 命令-中介者模式组合(Command-Mediator):命令模式将请求封装,而中介者模式协调多...
观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为模式。在iOS开发中,它是一种让多个对象监听或订阅某一个主题对象的状态变化,并在状态变化时自动收到通知的方式。这种模式使得...
今天我们要深入探讨的是“观察者模式”,也称为发布-订阅(Publish-Subscribe)模式,它属于行为设计模式的一种。这个模式的核心思想是定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的...