Java 中的观察者模式
来源:互联网 发布:上海 心理咨询 知乎 编辑:程序博客网 时间:2024/03/29 16:36
1。 观察者模式非常常见:
比如你在qq上更新了文章,然后你的所有的好友都会被告知,这就是一种观察者模式
此外,很多的图形界面都用到了观察者模式,例如swing ,当你点击某个按钮,其监听器就会执行操作,这也是一种观察者模式。
2 。 Java 实现观察者模式:
其实最好是自己写一个观察者模式,使用Java中的api 会给可扩展行带来困难,但是Java实现会非常简单,易用可以满足大部分需求
1)类 Observable:
表示应用程序想要观察的对象,一个 observable 对象可以有一个或多个观察者。观察者可以是实现了 Observer 接口的任意对
象。一个 observable 实例改变后,调用 Observable
的 notifyObservers
方法的应用程序会通过调用观察者的 update
方 法 来通知观察者该实例发生了改变。
2)public interface Observer
一个可在观察者要得到 observable 对象更改通知时可实现 Observer
接口的类。,定义一个观察者需要实现此接口
3 原理: 被观察者中某一函数会引起变化,并且希望将此变化通知观察者,可以先调用setChange()方法,表示状态已经改变,然后调
用 notifyObservers方法通知观察者
观察者中要有一个observable实例,并向此实例注册,将自己注册为此实例的观察者:
4。一个例子
public class FileOpen {
public static void main(String[] args)
{
System.out.print("11");
Subject sub=new Subject();
Viewer viewer=new Viewer(sub);
sub.setData(12);
sub.setData(22);
}
}
public class Subject extends Observable {
private int aa;
public Subject()
{
aa=0;
}
public void setData(int aa)
{
this.aa=aa;
setChanged();//////////////////////////////////////必须写上表示状态改变
//notifyObservers();
notifyObservers(aa);////////////////////////////必须写上通知所有的观察者
}
}
/**
*
* @author fanhengguang
* 观察者,当主题
*
*/
public class Viewer implements Observer {
private Observable obs;
public Viewer(Observable obs)
{
this. obs=obs;
obs.addObserver(this); //将此对象登记为观察者
}
@Override
public void update(Observable o, Object arg) { //实现接口中的方法
// TODO Auto-generated method stub
System.out.println("改变了");
System.out.println("此时的aa变为"+(Integer)arg); //注意此arg 为notifyObservers()传递过来的参数
}
}
- Java 中的观察者模式
- java中的观察者模式
- Java中的观察者模式
- java 中的观察者模式
- java中的观察者模式
- Java中的观察者模式
- java中的观察者模式
- java 中的观察者模式
- java中的观察者模式
- Java中的观察者模式
- java中的观察者模式
- Java中的观察者模式(Observer)
- Java中的观察者模式(Observer)
- Java中的观察者模式(Observer)
- java中的观察者模式2
- JAVA中的观察者模式实例教程
- Java中的观察者模式详解
- java中的观察者设计模式
- struct net_device 详解2
- VC dll 注入之钩子注入
- Android程序完全退出的三种方法
- 霍夫变换(Hough Transform)
- struct net_device 详解3
- Java 中的观察者模式
- 第11章 并发控制(数据库系统概论)
- install xmms
- DeskBand 实现6(遇到的问题)
- java中去字符串中的(全角)空格
- DeskBand 实现7(遇到的问题2)
- C语言字符数组的赋值问题及比较
- super is配置页面打不开的问题
- 最简单的Js时间格式验证,含时分秒!