Java中使用Observer接口和Observable类实践Observer观察者模式
2023-09-11 14:17:56 时间
在Java中通过Observable类和Observer接口实现了观察者模式。实现Observer接口的对象是观察者,继承Observable的对象是被观察者。
1. 实现观察者模式
实现观察者模式非常简单,
[1]创建被观察者类,它继承自java.util.Observable类;
[2]创建观察者类,它实现java.util.Observer接口;
[3]对于被观察者类,
添加它的观察者:
void addObserver(Observer o)
|
addObserver()方法把观察者对象添加到观察者对象列表中。
当被观察事件发生时,执行:
setChanged();
notifyObservers();
|
setChanged()方法用来设置一个内部标志位注明数据发生了变化;notifyObservers()方法会去调用观察者对象列表中所有的Observer的update()方法,通知它们数据发生了变化。
只有在setChange()被调用后,notifyObservers()才会去调用update()。
[4]对于观察者类,实现Observer接口的唯一方法update
void update(Observable o, Object arg)
|
形参Object arg,对应一个由notifyObservers(Object arg);传递来的参数,当执行的是notifyObservers();时,arg为null。
下面给出一个简单的示例:
package designpattern_observer; import java.util.Observable; public class MyButtonObserable extends Observable { private String clickMode; public String getClickMode() { return clickMode; } public void setClickMode(String clickMode) { this.clickMode = clickMode; this.setChanged(); this.notifyObservers(clickMode); } }
package designpattern_observer; import java.util.Observable; import java.util.Observer; public class MyTextBoxAbserver implements Observer { @Override public void update(Observable o, Object arg) { if (arg.toString().equals("double clicked")) { System.out.println("你对按钮执行了双击操作."); } } }
Test类:
package designpattern_observer; public class ObserverTest { public static void main(String[] args) { MyButtonObserable button = new MyButtonObserable(); MyTextBoxAbserver textbox = new MyTextBoxAbserver(); button.addObserver(textbox); button.setClickMode("double clicked"); } }
执行入口函数,调用 button.setClickMode("double clicked"),则触发MyTextBoxAbserver 对象的update方法,打印输出:
你对按钮执行了双击操作.
相关文章
- [java] javax.el.PropertyNotFoundException: Property 'id' not found on type bean.Student
- [Java基础] java的守护线程与非守护线程
- Java微信开发之公众号支付接口
- Java类集--List接口
- java:在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作
- Java实现 LeetCode 437 路径总和 III(三)
- java实现最近距离
- java实现第四届蓝桥杯猜年龄
- Java中环境变量PATH与CLASSPATH的区别
- Java实现 蓝桥杯VIP 算法训练 幂方分解
- Java实现蓝桥杯 历届试题 k倍区间
- Java实现 洛谷 P1049 装箱问题
- Java 虚拟机诊断利器
- 【JAVA】 02-Java对象细节
- JbpmUtil.java
- mysql、sqlserver、oracle分页,java分页统一接口实现
- java代码:netty整合websocket实现长连接代码示例
- java中集合Collection转list对象
- Atitit 通过调用gui接口杀掉360杀毒 360卫士 qq保镖等难以结束的进程(javac# php )
- 【java】Java 包(package)
- Java之Serializable接口实现序列化和反序列化实例以及部分序列化的四种方法
- Java:MyBatis-Plus-AutoGenerator代码生成器
- java-信息安全(十二)-数字证书、CA证书【Java证书体系实现】
- Java开发技术之成为高级java工程师必须学习的三个技术
- 在java.util中有EventListener接口:所有事件监听者都要实现这个接口。