观察者模式:定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
设计原则:
1.为交互对象之间的松耦合设计
注意:java本身自带了这种模式的接口。
具体实现如下:
/** *主题接口 */ public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(); }
/** * 观察者接口 */ public interface Observer { void update(String params); }
/** * 具体主题的实现 */ public class WeatherData implements Subject { private List<Observer> observers; private String params; //需要发布的数据 public WeatherData() { this.observers = new ArrayList<Observer>(); } @Override public void registerObserver(Observer observer) { if (observer != null) { this.observers.add(observer); } } @Override public void removeObserver(Observer observer) { int index = observers.indexOf(observer); if (index > 0) { observers.remove(index); } } /** * 通过此方法将数据发布给各订阅者 * */ @Override public void notifyObservers() { for(Observer observer: observers){ observer.update(params); } } /** * 需要发布的数据状态有改变 * */ public void setChange(){ notifyObservers(); } public String getParams() { return params; } public void setParams(String params) { this.params = params; setChange(); } }
/** * 观察者实现 */ public class CustomerObserver implements Observer { private String params; //订阅的数据 private Subject subject; public CustomerObserver(Subject subject) { this.subject = subject; this.subject.registerObserver(this); //此处维护订阅的关系 } @Override public void update(String params) { this.params = params; System.out.println("display params:" + params); } }
/** * 测试类 */ public class TestObserver { public static void main(String[] args) { WeatherData subject = new WeatherData(); Observer observer1 = new CustomerObserver(subject); Observer observer2 = new CustomerObserver(subject); subject.setParams("data1"); subject.setParams("data2"); } }
通过java 自身的接口实现观察者模式
import java.util.Observable; /** *继承java的类,不需要实现注册,和取消注册等方法,已经实现 */ public class WeatherData extends Observable { private String params; //需要发布的数据 public void statuChange(){ setChanged(); //注意此方法一定要调用,改变发布数据的状态 // notifyObservers(); //java自身实现 notifyObservers(new String("这个方法,将此对象发布到观察者对象中")); } public String getParams() { return params; } public void setParams(String params) { this.params = params; statuChange(); //状态改变 } @Override public String toString() { return "WeatherData{" + "params='" + params + '\'' + '}'; } }
import java.util.Observable; import java.util.Observer; /** * 观察者 */ public class CustomerObserver implements Observer { private Observable observable; public CustomerObserver(Observable observable) { this.observable = observable; this.observable.addObserver(this); } @Override public void update(Observable o, Object arg) { if(o instanceof WeatherData){ //此处获取发布的数据 System.out.println(o); } if(arg!=null){ //这个对象是发布方法传过来的 System.out.println("--------------" +arg); } } }
/** * Created by Administrator on 2017/11/18. */ public class TestJavaObserver { public static void main(String[] args) { WeatherData weatherData = new WeatherData(); CustomerObserver customerObserver = new CustomerObserver(weatherData); weatherData.setParams("参数"); } }
相关推荐
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
Android设计模式--观察者模式DEMO 观察者模式是一个使用频率非常高的模式,他最常用的地方是GUI系统和订阅-发布系统。 该模式的最重要的作用就是解耦,使观察者和被观察者之间依赖尽可能小,甚至好无依赖。
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它在C++中的应用广泛且实用。这种模式的核心思想是“主体”(Subject)与“观察者”(Observer)之间的松耦合关系,允许一个对象(即主体)的状态...
- 观察者模式(Observer):定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。 - 状态模式(State):允许对象在其内部状态改变时改变它的行为。 - ...
观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以及时地在对象之间传播状态变化。在Java中,观察者模式常用于构建事件驱动系统,使得多个对象能够监听并响应某个对象的状态改变。 首先,我们要理解...
《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
观察者模式(Observer Pattern)是软件设计模式中的行为模式之一,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或发布-...
观察者模式(Observer Pattern)是行为设计模式的一种,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心思想是发布-订阅模型,其中...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...
观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心思想是主体(Subject)与观察者(Observer)之间的...
观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象事件发生时通知多个“观察”该对象的其他对象。这个模式的核心在于建立一种一对多的关系,当一个对象的状态改变时,所有依赖于它的对象都会得到...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...
《新版设计模式手册 - C#设计模式(第二版)》是一部深入探讨C#编程中设计模式的权威指南,尤其适合已经有一定C#基础并希望提升软件设计能力的开发者阅读。设计模式是解决软件开发中常见问题的经验总结,是软件工程的...
JAVA-设计模式-行为型模式-观察者模式
观察者模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在构建可扩展和可维护的系统时。HeadFirst的设计模式系列书籍以其直观易懂的方式深受程序员喜爱,本笔记将深入探讨观察者模式的概念...
PPT内容包括:内附代码,实例,方便理解。 继承、封装、多态、UML ...设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。
观察者模式是软件设计模式中的一种行为模式,它允许一个对象,称为"主题",维护一个依赖于它的对象列表,这些对象被称为"观察者"。当主题的状态发生改变时,它会通知所有观察者,使它们能够自动更新自己。这种模式在...
代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(...观察者模式(Observer Pattern)、责任链模式(Chain of Responsibility Pattern)、访问者模式(Visitor Pattern)、状态模式(State ...