Java观察者模式
来源:互联网 发布:麦当劳改名知乎 编辑:程序博客网 时间:2024/05/21 17:50
观察者模式
观察者模式定义了对象间的一对多依赖关系,让一个或者多个观察者对象观察一个主题对象。
当主题对象的状态发生变化时,系统通知所有的依赖于才对想的观察者对象,从而使得观察者对象能够自动更新。
在观察者模式中,被观察的对象常常也被称为目标或者主题(Subject),依赖的对象称为观察者(Observer)
首先,实现一个观察者接口,一般来说该接口有一个update方法
/** * * @author Administrator * 观察者接口 */public interface Observer { void update(Observable o,Object arg);}
接下来实现一个被观察者的抽象类
/** * * @author Administrator * 被观察者类 */public abstract class Observable { //使用一个list来保存该对象上所有绑定的事件监听器 List<Observer> observers = new ArrayList<>(); //注册事件监听器 public void registerObserver(Observer observer) { this.observers.add(observer); } //删除指定事件监听器 public void removeObserver(Observer observer) { this.observers.remove(observer); } //通知该主题上注册的所有观察者 public void notifyObserver(Object value) { //遍历list for(Iterator<Observer> it = observers.iterator();it.hasNext();) { Observer o = it.next(); //显式调用每个观察者的update方法 o.update(this, value); } }}
实现我们具体的主题(被观察者的实现类)
/** * * @author Administrator */public class Product extends Observable{ private String name; private double price; public String getName() { return name; } public void setName(String name) { this.name = name; //触发事件 notifyObserver(name); } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; //触发事件 notifyObserver(price); } }
实现两个观察者
/** * * @author Administrator */public class PriceObserver implements Observer{ @Override public void update(Observable o, Object arg) { if(arg instanceof Double) { double price = (Double)arg; System.out.println("观察者:"+o+",物品名称已经改变为:"+price); } } }
/** * * @author Administrator */public class NameObserver implements Observer{ @Override public void update(Observable o, Object arg) { if(arg instanceof String) { //产品名称改变值在name中 String name = (String)arg; System.out.println("观察者:"+o+",物品名称已经改变为:"+name); } }}
/** * * @author Administrator */public class Test { public static void main(String[] args) { //创建一个被观察者对象 Product p = new Product(); //创建两个观察者对象 NameObserver no = new NameObserver(); PriceObserver po = new PriceObserver(); //注册观察者对象 p.registerObserver(po); p.registerObserver(no); p.setName("Iphone5"); p.setPrice(4999); } }
观察者模式包含四个角色:
被观察者的抽象基类:它通常会持有多个观察者对象的引用。Java提供了java.util.Observerable基类来代表被观察者的抽象基类。
观察者接口:该接口是所有观察者应该实现的接口。通常它包含一个抽象方法update();Java同样提供了Observer接口代表观察者接口
被观察的实现类:该类继承Observerable类
观察者的实现类:该类实现Observer接口的update方法
0 0
- java观察者模式
- java观察者模式
- Java 观察者模式
- Java实现观察者模式
- Java实现观察者模式
- Java 中的观察者模式
- Java观察者模式
- java Observer 观察者模式
- 观察者模式(Java)
- java 接口 观察者模式
- java观察者模式
- Java之观察者模式
- Java 观察者模式
- java 观察者模式
- java中的观察者模式
- java 观察者模式
- java观察者模式介绍
- java观察者模式
- 简介:如何利用IndexOf和SubString两种方法处理字符串
- DAL、DAO、ORM、Active Record辨析
- Java concurrent Framework并发之Executor框架分析(核心的地方要多次研究)
- 阿里与腾讯之争
- codeforces 226 div2
- Java观察者模式
- 《C++ Primer第五版》读书笔记(1)--redhat linux下安装gcc 4.8.2
- Android点亮屏幕和解锁完整示例
- Android API之android.view.View.MeasureSpec
- 在myEclipse中进行Debug调试
- python之三-statements and functions
- jQuery中Ajax-ajax方法
- c++中的floor,ceil,round
- XCode Debugger中的Icon符号的意义