博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
观察者模式
阅读量:6909 次
发布时间:2019-06-27

本文共 1749 字,大约阅读时间需要 5 分钟。

首先了解下观察者模式的概念;

观察者模式:定义了对象之间的一对多依赖,这样依赖,当一个对象改变状态的时候,它的所有依赖者都会受到通知并自动更新;

下面了做个简单小测试。

定义目标类,继承Observable类:

public class MySubject extends Observable{        //目标需要通知观察者的内容    private String msg;        public void set(String s) {                this.msg=s;        //setChanged()将changed状态改为true        setChanged();        //在changed改为true后才能通知所有观察者,并再将changed改为false        notifyObservers(msg);        }    public String getMsg() {        return msg;    }    public void setMsg(String msg) {        this.msg = msg;    }}

 定义观察者类,实现Observer接口:

public class ObjectA implements Observer {    private String msg;        @Override    public void update(Observable o, Object arg) {        //装换目标类并获取目标类需要通知的内容        msg=((MySubject)o).getMsg();            }    public String getMsg() {        return msg;    }    public void setMsg(String msg) {        this.msg = msg;    }}

下面就开始测试,观察者可以是多个:

public class Test {    public static void main(String[] args) {        //创建目标对象        MySubject ms=new MySubject();                //创建观察者对象        ObjectA obj1=new ObjectA();        ObjectA obj2=new ObjectA();        ObjectA obj3=new ObjectA();                //addObserver(obj)是Suject类自带的添加观察者方法        ms.addObserver(obj1);        ms.addObserver(obj2);        ms.addObserver(obj3);                ms.set("今晚一起吃小龙虾");                System.out.println(obj1.getMsg());        System.out.println(obj2.getMsg());        System.out.println(obj3.getMsg());    }}

类似群发信息给三个朋友(obj1,obj2,obj3),今晚一起吃小龙虾,他们同时收到消息。测试结果如下:

今晚一起吃小龙虾

今晚一起吃小龙虾
今晚一起吃小龙虾

观察者模式总结:

目标对象需要继承Observable,通过setChanged()和notifyObservers()通知观察者;

观察者需要实现Observer接口,通过.addObserver(this)来注册成为观察者,依靠update(Observable o, Object arg)来获取目标对象传递的数据。

转载于:https://www.cnblogs.com/zzjlxy-225223/p/11019398.html

你可能感兴趣的文章
我的友情链接
查看>>
gitlab web hooks 应用
查看>>
STM32的停机模式与唤醒
查看>>
安全运维之端口安全
查看>>
【转载】什么是站点,Active Directory系列之十一
查看>>
Red Hat Enterprise Liunx6 配置apache 全攻略
查看>>
CentOS 5.5下LVM的分区管理
查看>>
[Template]HTML Template 简介
查看>>
用传统的NAT方式替代H3C的DNS-MAP功能
查看>>
我的友情链接
查看>>
mysql数据(一)
查看>>
jeecg查询条件组装器使用or关键字
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
禁止 centos 休眠
查看>>
列表删除页代码
查看>>
亚马逊的EC2云计算系统
查看>>
分别让div浮层靠左靠右和居中
查看>>
如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)...
查看>>