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

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

定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。

被观察者要继承: Observable类  实现消息推送  、setChanged  notifyObservers();

观察者要继承: Observer类  实现updata(); 注册 

 

package 观察者模式;import java.util.Observable;import java.util.Observer;/** *  * @author 红尘Dream * 观察者模式: 一对多的模式  * 当被观察者发生变化时, 观察者会受到通知自动更新 * 服务被观察者 : 推送消息 通知观察者 * 观察者: 订阅主题    自动更新消息 */public class Test{    public static void main(String[] args)    {        Service s = new Service(); //创建被观察者 服务者        Observerl o = new Observerl(); //创建观察者        Observerl o1 = new Observerl(); //创建观察者        Observerl o2 = new Observerl(); //创建观察者        Observerl o3 = new Observerl(); //创建观察者        Observerl o4 = new Observerl(); //创建观察者                o.registerService(s);//订阅服务        o1.registerService(s);        o2.registerService(s);        o3.registerService(s);        o4.registerService(s);        //取消订阅        o1.unRegisterService(s);        s.setMsg("今天新闻热点");                            }}/** * 服务类  被观察者  用于推送消息 */class Service extends Observable{    private String msg;        public String getMsg()    {        return msg+"(来自服务者(被观察者))";    }        /**     *      * 推送消息     */    public void setMsg(String msg)    {        this.msg = msg;        setChanged();//设置改变        notifyObservers();// 通知观察者    }        } /** *  被观察者 类 */class Observerl implements Observer{        /**     * 订阅 服务     *      */    public void registerService(Observable observable)    {        observable.addObserver(this);    }        /**     * 取消订阅     */    public void unRegisterService(Observable observable)    {        observable.deleteObserver(this);    }    /**     *  实现观察者的更新方法     */    @Override    public void update(Observable arg0, Object arg1)    {        if(arg0 instanceof Service)        {            Service s = (Service) arg0;            System.out.println("观察者更新:"+s.getMsg());        }    }    }

执行结果:

观察者更新:今天新闻热点(来自服务者(被观察者))观察者更新:今天新闻热点(来自服务者(被观察者))观察者更新:今天新闻热点(来自服务者(被观察者))观察者更新:今天新闻热点(来自服务者(被观察者))

 

转载于:https://www.cnblogs.com/pbq-dream/p/5411614.html

你可能感兴趣的文章
java代码编译与C/C++代码编译的区别
查看>>
Bitmap 算法
查看>>
转载 C#文件中GetCommandLineArgs()
查看>>
list control控件的一些操作
查看>>
绝望的第四周作业
查看>>
一月流水账
查看>>
npm 常用指令
查看>>
判断字符串在字符串中
查看>>
Linux环境下Redis安装和常见问题的解决
查看>>
HashPump用法
查看>>
cuda基础
查看>>
Vue安装准备工作
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>
Xcode5和ObjC新特性
查看>>
LibSVM for Python 使用
查看>>
Centos 7.0 安装Mono 3.4 和 Jexus 5.6
查看>>
CSS属性值currentColor
查看>>
java可重入锁reentrantlock
查看>>
浅谈卷积神经网络及matlab实现
查看>>