设计模式:观察者模式
来源:互联网 发布:什么是圆方软件 编辑:程序博客网 时间:2024/05/29 09:15
观察者模式:
Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。
Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖她的其它对象之间保持状态同步。
模式结构:
观察者模式角色和职责:
Subject(被观察者):被观察的对象,当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。
ConcreateSubject:被观察者的具体实现。包含一些基本的属性状态及其他操作。
package observer;
import java.util.Observable;
/**
* 被观察者
*
* @author 郭胜
*
*/
public class Person extends Observable {
private String name;// 名字
private String sex;// 性别
private Integer age;// 年龄
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
this.setChanged();
this.notifyObservers();
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
this.setChanged();
this.notifyObservers();
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
this.setChanged();
this.notifyObservers();
}
}
Observer(观察者):接口或抽象类。当Subject的状态发生变化时,Observer对象将通过一个callback函数得到通知。
ConcreateObserver:观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。
package observer;
import java.util.Observable;
import java.util.Observer;
public class MyObserver implements Observer{
public void update(Observable o, Object arg) {
System.out.println("快看,变了,变了,真的变了……");
}
}
package observer;
public class TestObserver {
public static void main(String[] args){
Person p = new Person();
p.addObserver(new MyObserver());
p.setName("郭胜");
p.setAge(18);
p.setSex("男");
}
}
观察者模式的应用:
侦听事件驱动程序设计中的外部事件
侦听/监视某个对象的状态变化
发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等)被触发时,通知邮件列表中的订阅者
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- CentOS7修改默认运行级别
- 在docker中启动mysql容器
- 分布式缓存Redis之主从复制与Sentinel哨兵
- SpringCloud Eureka项目启动子项目报错Connection refused: connect Cannot execute request on any known server
- 理解JS捕获、目标、冒泡三个阶段
- 设计模式:观察者模式
- 调整数组使奇数位于偶数前面
- MailSploit:30多种邮件客户端存在电邮身份伪造漏洞
- 简单性
- 频道管理
- 网卡类WiFi模块系列二:USB接口单通道多功能高性能WiFi模块
- (转载)pycharm快捷键及一些常用设置
- 基于Anaconda清华镜像安装Scrapy
- 设置大华称开头两位