博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式----观察者模式通俗实例
阅读量:6136 次
发布时间:2019-06-21

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

观察者模式(一对多的依赖关系):主题对象发生变化时候,通知所有依赖该对象的观察者对象,使得观察者对象更新。

被观察的对象:主题

依赖的对象:观察者

例子:例如一个软件更新版本了,会通知用户版本更新信息

所有观察者都要实现这个观察者接口

package com.ij34.observer;   /*    * 所有观察者都要实现这个观察者接口   */public interface Observer{    void update(Observable o , Object text);}

 

 

主题抽象类,里面含有注册、删除、通知观察者

package com.ij34.observer;import java.util.ArrayList;import java.util.List;import java.util.Iterator;/* * 主题抽象类,里面含有注册、删除、通知观察者 */public abstract class Observable{    List
list = new ArrayList
(); public void registObserver(Observer o) { list.add(o); } public void removeObserver(Observer o) { list.remove(o); } public void notifyObservers(Object value) { for (Observer o : list) { o.update(this , value); } }}

 

产品版本升级了,就通知观察者

 

package com.ij34.observer;/* * 产品setter更改了,就通知软件所有订阅的人(观察者),继承Observable类,使用notifyObservers方法 */public class Product extends Observable{    private String version;    public Product(){}    public Product(String version)    {        this.version=version;    }    public String getVersion() {        return version;    }    public void setVersion(String version) {        this.version = version;        notifyObservers(version);    }}

 

软件版本观察者

package com.ij34.observer;/* * 当有新的版本时候,通过setter来触发该观察者类VersionObserver */public class VersionObserver implements Observer{    @Override    public void update(Observable o, Object text) {        if(text instanceof String){            System.out.println("软件已有新版本:"+text);        }    }}

 

测试

package com.ij34.observer;public class Test{    public static void main(String[] args)    {      Product p=new Product();      VersionObserver vo=new VersionObserver();      p.registObserver(vo);      p.setVersion("第2018版本");    }}

 

 

测试结果

 

转载地址:http://bteua.baihongyu.com/

你可能感兴趣的文章
openstack 虚拟机添加网卡
查看>>
Groovy学习笔记(6)-javax.script.* API
查看>>
RocketMQ服务搭建
查看>>
微信支付 - 可以下单但是无法收到通知消息Log总显示begin notify
查看>>
分享我如何活用notepad++
查看>>
Object-c的基础概念
查看>>
GNU Building System
查看>>
自我关系的建立
查看>>
RAID
查看>>
配置文件及工具包
查看>>
转 前端开发利器—FIDDLER
查看>>
mysql读取配置文件的顺序
查看>>
《游戏程序设计模式》 2 - 顺序模式
查看>>
数据过滤器注解@Filter 如何在hibernate、spring data jpa中调用
查看>>
Eclipse上GIT插件EGIT使用手册之九_Rebase和Merge的区别
查看>>
logback + slf4j + jboss + spring mvc
查看>>
罗伯特·帕丁森Robert Pattinson
查看>>
服务器反爬虫攻略:nginx禁止某些User Agent抓取网站
查看>>
【转】模板类实例化的相关常识
查看>>
Python 作用域(scope) 和 LEGB
查看>>