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

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

hot3.png

1. 认识观察者模式

    1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。

    2. 组织结构:

  • Subject:目标对象类,会被多个观察者监视;目标类必须提供对观察者的维护操作,即注册和销毁;目标对象的状态发送变化时,必须通知监视该对象的所有有效观察者
  • Observer:观察者的接口,定义被观察对象发送变化时进行通知的方法,在这个方法内进行业务处理
  • SubjectImpl:具体的目标实现类
  • ObserverImpl:观察者具体实现类,用来接受目标对象的通知,并进行对应的处理

    3. 参考代码:

/** * @ClassName:Observer * @Description:观察者接口 */public interface Observer {	//传入目标对象,获取其状态的更新变化,执行对应的处理	public void update(Subject s);	}public class ObserverImpl1 implements Observer{	//观察者的状态	private String state;	@Override	public void update(Subject s) {		//更新观察者的状态属性		state=((SubjectImpl1)s).getState();	}}/** * @ClassName:Subject * @Description:被观察的目标对象 */public class Subject {	//保存观察自己的观察者对象	List
list=new LinkedList
(); //注册观察者对象 public void regist(Observer ob){ list.add(ob); } //移除观察者对象 public void remove(Observer ob){ list.remove(ob); } //通知所有观察者状态改变 public void notifyObserver(){ for(Observer ob:list){ ob.update(this); } }}public class SubjectImpl1 extends Subject{ //注意,这里的state属性只是做一个示例,可以是其他的属性名,属性类型也可以是其他任意类型 private String state; public String getState() { return state; } public void setState(String state) { this.state = state; //状态更新,通知观察者 notifyObserver(); }}

2. 理解观察者模式

    1. 目标与观察者之间是一对多的关系,但是观察者也可以观察多个目标对象,可以在观察者内部添加多个update方法来进行对不同的目标对象进行观察,也可以写在一个update方法内但需要进行区分,对于不同的目标对象进行不同的处理。

    2. jdk中提供的观察者模式的相关类:java.util.Observable类,它实现了大部分目标对象所需要的方法;还有一个java.util.Observer接口,该接口是观察者接口,只包括了一个观察者实现类应该实现的update方法

 

转载于:https://my.oschina.net/ProgramerLife/blog/2249663

你可能感兴趣的文章
使用VeraCrypt进行整盘加密介绍
查看>>
在Ambari上添加Kerberos
查看>>
cygwin2.6_x86编译安装python3.5.2
查看>>
【12c新特性】CBO Optimizer优化器新特性列表
查看>>
jenkins 配置slave节点
查看>>
grep查看匹配行的上下行
查看>>
简于形 精于心 – 索尼 Duo 11上手体验
查看>>
拥抱自己的wordpress
查看>>
mac 安装软件利器
查看>>
Java动态代理学习1——静态代理
查看>>
node.js学习笔记之正则表达式
查看>>
hijack.c
查看>>
使用ACL匹配奇偶网络号及IP地址
查看>>
ibatis快速入门(一)
查看>>
四、基于802.1x+AD+NPS+DHCP动态下发VLAN配置 (第4篇、添加角色DHCP服务器并配置)...
查看>>
linux基础命令学习之ls(1)
查看>>
巧用windows批处理,实现简易邮件群发功能
查看>>
SAMBA
查看>>
同事联系方式备份脚本编写
查看>>
gulp构建前端工程
查看>>