观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。我们常用的事件机制内部实现就使用了观察者模式。java类也帮我们实现了观察者模式。下面举实例来讲解观察者设计模式,为了便于更好的理解观察者模式,先自己编写观察者模式,不调用java自带的接口和实现类。
事例:现在人都喜欢网购,当你看上一件商品时你可能会想时时关注商品的价格波动,当该商品的价格变化时希望能收到通知。此时我们就可以利用观察者模式来处理。此时关注的商品是被观察者,而“我们”就是具体的观察者对象
1.自定义观察者模式
定义被观察者对象接口
package com.longpo.observer; /** * 被观察者接口 */ public interface Subject { //注册一个观察者对象 public void registerObserver(Observer observer); //移除一个观察者对象 public void removeObserver(Observer observer); //通知所有观察者更新信息--这里是价格变化时 public void notifyObserver(); }
定义具体的被观察者对象--商品
package com.longpo.observer; import java.util.ArrayList; /** * 具体的被观察者对象--商品 */ public class Goods implements Subject{ //观察者对象列表 public ArrayList<Observer> lists=new ArrayList<Observer>(); //观察的属性--价格--设置成私有的,改变价格需要调用setPrice方法,从而发出通知 private float price; public Goods(float price) { super(); this.price = price; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; //价格一发生变化,调用通知方法 notifyObserver(); } //添加一个观察者 @Override public void registerObserver(Observer observer) { lists.add(observer); } //移除一个观察者 @Override public void removeObserver(Observer observer) { lists.remove(observer); } //通知所有观察者进行更新 @Override public void notifyObserver() { //通知所有观察者对象 for(int i=0;i<lists.size();i++) { lists.get(i).update(price); } } }
定义观察者接口
package com.longpo.observer; /** * 观察者接口 */ public interface Observer { //价格变化进行更新的方法 public void update(float price); }
定义具体的观察者类
package com.longpo.observer; /** *具体的观察者对象---人 */ public class Person implements Observer{ public String name; public Person(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } //收到价格变动后执行的函数 @Override public void update(float price) { System.out.println(name+"关注商品的价格变为了:"+price); } }
以上我们就实现了观察者设计模式,来测试一下
package com.longpo.observer; public class Test { public static void main(String[] args) { //创建一个被观察者对象--初始价格2000 Goods goods=new Goods(2000); //定义人对象 Person person=new Person("小明"); Person person1=new Person("小红"); Person person2=new Person("小黑"); //把三人都注册成为观察者 goods.registerObserver(person); goods.registerObserver(person1); goods.registerObserver(person2); //价格发生变化--会自动通知所有观察者对象 goods.setPrice(998); System.out.println("-------------------------"); goods.removeObserver(person);//小明取消为观察者。。小明不再接收价格变动的通知 goods.setPrice(888); } }
运行结果:
2.使用java自带的接口和实现类
定义被观察者对象类继承Observable
package com.longpo.observer.java; import java.util.Observable; /** * java自带的观察者设计模式,通过继承Observable类来实现具体的被观察对象 */ public class Goods extends Observable { private float price;//只需要定义自己需要观察的属性,其他方法Observable类已经帮我们实现 public Goods(float price) { this.price = price; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; //通知价格改变 this.setChanged(); //调用更新方法--该方法是Observable的方法--price对应观察者的arg参数 this.notifyObservers(price); } }
定义观察者对象类实现Observer接口
package com.longpo.observer.java; import java.util.Observable; import java.util.Observer; /** * 通过实现java.util.Observer接口实现具体的观察者对象 */ public class Person implements Observer{ private String name; public Person(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override /** * Observable o:被观察者类 * Object arg :被观察者传递的参数 */ public void update(Observable o, Object arg) { //当Goods调用this.notifyObservers(price)时 System.out.println(name+"关注的商品的价格变化为:"+arg); } }
测试代码
package com.longpo.observer.java; public class Test { public static void main(String[] args) { Goods goods=new Goods(2000); Person person=new Person("小红"); Person person1=new Person("小明"); Person person2=new Person("小黑"); //三人都添加关注 goods.addObserver(person); goods.addObserver(person1); goods.addObserver(person2); goods.setPrice(988); System.out.println("----------------------"); goods.deleteObserver(person1);//person1取消关注 goods.setPrice(999); } }
运行结果:
相关推荐
观察者设计模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这个模式在很多场景下都有广泛...
观察者设计模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 **委托** 委托在.NET中可以视为类型安全的函数指针,它允许我们...
观察者设计模式是一种行为设计模式,它允许一个对象(称为主题)在状态改变时通知其他对象(称为观察者)。这种模式常用于事件处理,当一个对象的状态发生变化时,所有依赖于该状态的对象都会得到通知并自动更新。在...
观察者设计模式是一种行为设计模式,它允许对象在状态改变时通知其他依赖它的对象,而无需显式指定这些依赖关系。在这个"观察者设计模式demo"中,我们可能看到一个具体的实现,特别是在Android开发中的应用,例如在...
构建者模式、回调和观察者设计模式是软件开发中常用的设计模式,它们分别在不同的场景下发挥着重要的作用。下面将详细介绍这三个设计模式,并通过一个简单的例子来展示它们的应用。 首先,构建者模式(Builder ...
Java中的监听机制与观察者设计模式是编程中重要的概念,它们在软件开发中扮演着关键的角色,尤其是在构建可扩展和可维护的系统时。这里,我们将深入探讨这两个主题,并通过实例来阐述它们的工作原理和应用。 首先,...
轻松理解观察者设计模式
Java观察者设计模式(Observer Design Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件处理,例如...
031114_【第11章:Java常用类库】_观察者设计模式笔记
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,我们可以利用Java提供的...
ObserverDemo观察者设计模式Demo
观察者模式,也称为发布-订阅模式或事件驱动模式,是一种行为设计模式,它定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 在C#、ASP.NET等.NET框架中,...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...
观察者设计模式观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时...
观察者模式是软件设计模式中的一种行为模式,它在对象之间定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件驱动编程、发布/订阅系统...
Java观察者设计模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件处理系统,将观察者与被观察对象解耦,使得...