观察者设计模式浅谈
2015-10-16 12:26
423 查看
这里并非具体的分析观察者设计模式,仅仅是提供一个观察者模式的入门,主要是了解观察者设计模式的作用以及使用Observable类与Observer接口实现观察者模式
一.什么是观察者设计模式?
《设计模式》一书对Observer是这样描述的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并自动更新,下面看一个例子:现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到。这里的购房者都属于观察者,他们都在关注着房子的价格
二.观察者模式实现
java.util包中提供了Observable类和Observer接口,使用他们可以完成观察者模式
需要被观察得类必须继承Observable类,public class Observable extends Object
Observable类的常用方法如下:
然后每个观察者类都需要实现Observer接口,Observer接口定义如下:
代码:观察者模式的实现
参考资料:李兴华java视频
一.什么是观察者设计模式?
《设计模式》一书对Observer是这样描述的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并自动更新,下面看一个例子:现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到。这里的购房者都属于观察者,他们都在关注着房子的价格
二.观察者模式实现
java.util包中提供了Observable类和Observer接口,使用他们可以完成观察者模式
需要被观察得类必须继承Observable类,public class Observable extends Object
Observable类的常用方法如下:
然后每个观察者类都需要实现Observer接口,Observer接口定义如下:
public interface Observer{ void update(Observable o,Object arg); }此接口中只定义了一个update方法,第一个参数表示被观察者实例,第二参数表示修改的内容
代码:观察者模式的实现
import java.util.Observable; import java.util.Observer; class House extends Observable{ private float price; public House(float price){ this.price = price; } public void setPrice(float price){ super.setChanged(); //设置变化点 super.notifyObservers(price); //通知所有观察者价格改变 this.price = price; } public float getPrice(){ return price; } public String toString(){ return "房子价格为:"+this.price; } } class HousePriceObserver implements Observer{ private String name; public HousePriceObserver(String name){ this.name = name; } public void update(Observable obj,Object arg){ if(arg instanceof Float){ //判断参数类型 System.out.print(this.name+"观察到价格更改为:"); System.out.println(((Float)arg).floatValue()); } } } public class ObserverDemo{ public static void main(String[] args){ House h = new House(100000); HousePriceObserver hpo1 = new HousePriceObserver("购房者A"); HousePriceObserver hpo2 = new HousePriceObserver("购房者B"); HousePriceObserver hpo3 = new HousePriceObserver("购房者C"); h.addObserver(hpo1); h.addObserver(hpo2); h.addObserver(hpo3); System.out.println(h); //输出房子价格 h.setPrice(66666); //修改房子价格 System.out.println(h); } }
参考资料:李兴华java视频
相关文章推荐
- Lua编程示例(二):面向对象、metatable对表进行扩展
- C#中观察者模式的3种实现方式
- C#中面向对象编程机制之多态学习笔记
- 浅谈Lua的面向对象特性
- Lua面向对象之类和继承浅析
- JavaScript面向对象的两种书写方法以及差别
- 浅谈c# 面向对象之类与对象
- C#面向对象特征的具体实现及作用详解
- C# 面向对象的基本原则
- 浅谈对c# 面向对象的理解
- 浅谈Nodejs观察者模式
- Ruby面向对象编程详解
- php学习 面向对象 课件第1/2页
- PHP程序61条面向对象分析设计的经验小结
- 收集学习asp.net比较完整的面向对象开发流程
- javascript 面向对象编程 万物皆对象
- 不错的JavaScript面向对象的简单入门介绍第1/2页
- [推荐]javascript 面向对象技术基础教程
- javascript 面向对象的JavaScript类
- JavaScript中的面向对象介绍