head first 设计模式 Observer模式
来源:互联网 发布:opencv python视频教程 编辑:程序博客网 时间:2024/05/28 06:05
策略模式:定义了对象之间的一对多依赖,这样一来,这样一来当一个发生改变的时候,它的所有依赖都会发生变化
观察者模式代码如下
1主题接口也就是那个可能会发生数据变化
publicinterfaceSubject
{
//将观察者注入到主题中
publicvoidregisterObserver(Observero);
//将观察者从主题中去除
publicvoidremoveObserver(Observero);
//当主题的数据发生变化的时候,这个方法会通知所有的观察者
publicvoidnotifyObserver();
}
2观察者接口,当数据发生变化的时候这里会随之发生变化
publicinterfaceObserver
{
//当主题状态改变时,这个方法会被调用,以通知所有的观察者
publicvoidupdate(floattemp,floathumidity,floatpressure);
}
3更新数据的显示接口,他只负责更新数据
publicinterfaceDisplayElement
{
//当布告板需要显示时调用此方法
publicvoiddisplay();
}
4主题的实现类也就是1的实现类
//数据类
publicclassWeatherDataimplementsSubject
{
//设置观察者的数组
privateArrayListobserver;
privatefloattemp;
privatefloathumidity;
privatefloatpressure;
//初始化的时候创建数组,这个用来存放观察者集合
publicWeatherData()
{
observer=newArrayList();
}
// 注册
@Override
publicvoidregisterObserver(Observero)
{
observer.add(o);
}
// 删除
@Override
publicvoidremoveObserver(Observero)
{
inti=observer.indexOf(o);
//查找到的情况下才删除
if(i>=0)
{
observer.remove(i);
}
}
//通知每一位观察者
@Override
publicvoidnotifyObserver()
{
for(inti=0;i<observer.size();i++)
{
Observero=(Observer)observer.get(i);
o.update(temp,humidity,pressure);
}
}
//从气象站得到更新时反馈给观察者
publicvoidmeasurementsChanged()
{
notify();
}
//监测站更细数据
publicvoidsetMeasurement(floattemp,floathumidity,floatpressure)
{
this.temp=temp;
this.humidity=humidity;
this.pressure=pressure;
}
}
5观察者类实现了观察者接口以及使数据更新的更新接口
publicclassCurentConditionsDisplayimplementsObserver,DisplayElement
{
privatefloattemperature;
privatefloathumidity;
privateSubjectweathData;
//将布告板注册到主题中
publicCurentConditionsDisplay(SubjectweathData)
{
this.weathData=weathData;
weathData.registerObserver(this);
}
//更新
publicvoidupdate(floattemp,floathumidity,floatpressure)
{
this.humidity=humidity;
display();
}
//展示
@Override
publicvoiddisplay()
{
System.out.println("CurrentConditions"+humidity);
}
}
我觉得这个设计模式在这个里面用的比较好的一点就是o.updata()这个更新方法将观察者进行了更新
还有它的核心就是一些在构造函数里面进行的一系列的初始化比如数组的初始化,以及在构造参数里面进行注册
,看着就好像是你中有我我中有你相互这件有关联的关系,但是观察者有多个,所以最后的结果就达到了一对多的关系
jdk自带的也有观察者模式但是会出现一系列的问题
阅读全文
0 0
- 《Head First设计模式》学习-Observer模式
- 《Head First设计模式》学习-Observer模式
- head first 设计模式 Observer模式
- head first 设计模式之----Observer pattern
- Head First 设计模式第二章 ----observer模式笔记
- Head First 设计模式——观察者模式(Observer Pattern)
- Head First设计模式之观察者模式(Observer Pattern)
- Head First 设计模式 Design Pattern 1-2 Strategy, Observer
- Head First 设计模式
- Head-first设计模式
- head first 设计模式
- head first 设计模式
- Head First 设计模式
- 《Head First 设计模式》
- Head First设计模式
- Head First《设计模式》
- 《Head First设计模式》
- Head First设计模式
- 大脑双核单总线模型~《程序员思维的修炼》读后感
- Kotlin-10.接口(interface)
- 最小生成树的两种最基本的算法
- 欢迎使用CSDN-markdown编辑器
- 542. 01 Matrix
- head first 设计模式 Observer模式
- filter、map、reduce学习
- Oracle第二、三章 限制数据查询
- poj 1218 THE DRUNK JAILER
- C数据结构设计中,表首结点和二叉树根结点的头指针——传指针还是传指针的指针?
- BZOJ4241 历史研究 (分块 回滚莫队-教程向)
- java继承
- C++11 std::unique_lock与std::lock_guard区别及多线程应用实例
- vim手册