使用util包里自带的接口和类实现观察者模式
之前的关于观察者模式的文章,是用自己写的Observable接口和Observer接口,然后进行实现。其实官方的util包下自带有实现观察者模式对应的接口和类,可以简化我们的代码结构。
比如我们可以直接创建一个子类通过继承 util包下的Observable类来成为被观察者,这样就不用自己去写一个接口,然后实现它的方法,或是自己创建一个List来存储所有观察者了。
我们只需要在需要通知观察者时先调用setChanged()来表示自己的数据或状态已经发生了改变,然后在调用notifyObservers()方就可以了。
依旧拿上次的猫叫惊醒主人,吓跑老鼠的场景为例:
先写Cat类
public class Cat extends Observable{
public String message;
public void miao(){
this.message="喵~~";
System.out.println("喵~~");
setChanged();
notifyObservers(this.message);
}
可见,这次的代码比之前简洁了许多,我们这里要注意的是 ,在调用notifyObservers()方法之前一定要先调用setChanged()方法,用于表示被观察者的状态已经发生了改变,不然观察者们不会进行响应。另外,我们可以注意到,notifyObservers()传入的是this.message,也就是把 "喵~~" 发送给观察者。
再看另一边的观察者们
老鼠类
public class Mouse implements java.util.Observer{
public void run(String message){
System.out.println("我听到了"+message+" 快跑啊!猫来啦!!");
}
@Override
public void update(java.util.Observable o, Object arg) {
run(arg.toString());
}
}
老鼠类的update()方法中有两个参数,第一个就是被观察者对象,也就是猫,第二个就是猫的notifyObservers()方法里传入的参数,也就是“喵~~”,如果之前在猫的notifyObservers()方法中什么都不传,那么这里得到的arg就是null。我们在update()方法中直接执行了run()方法,表示老鼠开始逃跑。
来看最后一个 主人类
public class Master implements java.util.Observer{
public void awake(String message){
System.out.println(message.toString()+" 别打扰我睡觉!!");
}
@Override
public void update(Observable o, Object arg) {
awake(arg.toString());
}
}
和老鼠类的实现相同,在update()中调用awake()方法表示被吵醒。
场景类
public class Context {
public static void main(String[] args) {
Cat tom=new Cat();
Master master=new Master();
Mouse jerry=new Mouse();
tom.addObserver(master);
tom.addObserver(jerry);
tom.miao();
}
}
场景类基本没有变化
最终的执行结果如下:
喵~~
我听到了喵~~ 快跑啊!猫来啦!!
喵~~ 别打扰我睡觉!!
总的来说,使用官方的类和接口后,我们的代码相较之前简洁了许多,如果对观察者模式不够熟悉的,可以先自己去写Observable和Observer接口来实现。而如果已熟练掌握了大概的思想,还是推荐使用官方提供给我们的util。
使用util包里自带的接口和类实现观察者模式的更多相关文章
- util包里的一些类的使用
好几天没有更新我的博客了 .国庆放假出去玩了一趟,这回来应该收心回到我的事业上了,哈哈哈!废话不多说,开始学习吧!首先今天来学习一些例子,这些例子可以回顾假期遗忘的知识,还能提高自己的能力.程序也会相 ...
- java util包概述
util是utiliy的缩写,意为多用途的,工具性质的包这个包中主要存放了:集合类(如ArrayList,HashMap等),随机数产生类,属性文件读取类,定时器类等类.这些类极大方便了Java编程, ...
- java.util包详解
介绍Java的实用工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构.本章介绍Java的实用工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结 ...
- 利用ASP.NET里自带的站点地图工具制作网站站点地图
站点地图很方便能快速给我们导航我们要去访问的地址,能按层级关系分门别类,给用户一个很好的用户体验,很好的看到自己当前所在的网站位置 站点地图,又称网站地图,它就是一个页面,上面放置了网站上所有页面的链 ...
- Servlet基础之一:Servlet基本接口与类
1.概述 Servlet API中共有5个包,约113个接口和类: javax.servlet javax.servlet.http javax.servlet.jsp javax.servlet.a ...
- 集合框架的类和接口均在java.util包中。 任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换。
集合框架的类和接口均在java.util包中. 任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换.
- List,Set,Map在java.util包下都是接口 List有两个实现类:ArrayList和LinkedList Set有两个实现类:HashSet和LinkedHashSet AbstractSet实现了Set
List,Set,Map在java.util包下都是接口 List有两个实现类:ArrayList和LinkedListSet有两个实现类:HashSet和LinkedHashSetAbstractS ...
- requests接口自动化2-url里不带参数的get请求
最常用的是get,post请求,然后是put,delete,其他方法很少用 1. get请求几种方式 1.1.url里不带参数的get请求 接口请求fiddler返回内容: import reques ...
- PHP通过php-java-bridge调用JAVA的jar包里class类
正 文: 有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法,一般飘易推荐的做法是采用php-java-bridge做桥接,本文就来介绍一下大致的实现方法. 先简单说 ...
随机推荐
- springMVC,spring和Hibernate整合(重要)
springMVC,spring和Hibernate整合 https://my.oschina.net/hugohxb/blog/184715 第一步:搭建一个springmvc工程,需要的jar有: ...
- eclipse生成mybatis的逆向工程-mybatis代码自动生成
首先,工作中一直在使用命令方式的mybatis的代码自动生成,今天把自己的笔记本直接搞一个在eclipse中生成的逆向代码生成工程,方便自己在家学习使用,在搞这个工程的过程中由于自己搞了一套环境,所i ...
- Noip2018普及组初赛试题解题报告
解题思路: 一.单项选择题 (答案:DDDBBAAAABABBBB) 1.除D外,其余均为输入设备. 2.除D外,其余都等于(617)10 ,D选项为(619)10. 3.1MB=1024KB=102 ...
- Intellij IDEA中配置TFS
TFS是微软推出的一款研发过程管理利器,C#阵营的VS里做了默认集成,但是对于Java阵营的Intellij IDEA,需要安装插件并进行相应配置才能使用: 1.打开配置 2.搜索并安装插件 3.配置 ...
- php中常用的加密函数
1.MD5加密: string md5 ( string $str [, bool $raw_output = false ] ) (1)md5()默认情况下以 32 字符十六进制数字形式返回散列值, ...
- CSS样式表——列表与布局
列表方块:针对<ol></ol>和<ul></ul> 属性style="list-style:none" ...
- 前端学习(22)~css问题讲解
你是如何理解 HTML 语义化的? 语义化:指对文本内容的结构化(内容语义化),选择合乎语义的标签(代码语义化). 举例:段落用 p,边栏用 aside,主要内容用 main 标签. 好处: 便于开发 ...
- GNS3 模拟Arp命令2
R1 : conf t int f0/0 no shutdown ip add 192.168.1.1 255.255.255.0 no ip routing end R2 f0/0: conf t ...
- 【pwnable.kr】cmd2
这道题是上一个cmd1的升级版 ssh cmd2@pwnable.kr -p2222 (pw:mommy now I get what PATH environmentis for :)) 登录之后, ...
- sql编程利器,Sql Prompt下载及安装方法
Sql Prompt只能提示及其格式化用起来非常方便: 推荐网址:www.4-yecao.com 免费下载地址:http://download.csdn.net/detail/caizz520/455 ...