第62章
*Theweathertoset.
*/
publicvoidsetWeather(Stringweather){
大B:“不是。1、抽象目标角色:目标角色知道它的观察者,可以有任意多个观察者观察同一个目标。并且提供注册和删除观察者对象的接口。目标角色往往由抽象类或者接口来实现。2、抽象观察者角色:为那些在目标发生改变时需要获得通知的对象定义一个更新接口。抽象观察者角色主要由抽象类或者接口来实现。3、具体目标角色:将有关状态存入各个具体观察者角色对象。当它的状态发生改变时,向它的各个观察者发出通知。4、具体观察者角色:存储有关状态,这些状态应与目标的状态保持一致。实现观察者角色的更新接口以使自身状态与目标的状态保持一致。在这个角色内也可以维护一个指向具体目标角色对象的引用。”
大B:“用一个实际的例子来说明:日常生活中说起观察者,最常见的例子可能就是天气预报,在这里我们的观察对象是地球,而我们是通过发射气象卫星这个观察者来检测地球气象变化的。”
所以这个例子中涉及三个对象:
setChanged;
notifyObservers(weather);
[注意]在需检测的对象前需要设置变化点setChanged和通知观察者notifyObservers,这两个函数是由Observable类实现的,封装了观察者模式实现的细节。
观察者:气象卫星(Satellite)
/***//**
*观察对象:气象卫星
*/
publicclassSatelliteimplementsObserver{
privateStringweather;
publicvoidupdate(Observableobj,Objectarg){
weather=(String)arg;
//捕获天气变化情况,反馈给检测者
(近期天气变化:+weather);
客户端调用:气象局(WeatherService)
/***//**
*客户端调用:天气预报
*/
publicclassWeatherService{
/***//**
*amargs
*/
publicstaticvoidmain(Stringargs){
Earthearth=newEarth;
Satellitesatellite=newSatellite;
//发射气象卫星
(satellite);
(天气预报:);
(“——”);
(“台风‘珍珠’逼近”);
(“大到暴雨”);
(“天气炎热”);
[运行结果]
天气预报:
——
近期天气变化:台风‘珍珠’逼近
近期天气变化:大到暴雨
近期天气变化:天气炎热
地球(Earth):被观察对象
气象卫星(Satellite):观察者
/***//**
*amweather
*urnReturnstheweather.
小A:“那它的组成部分哩?是不是就是有观察者和被观察者的就是属于观察者模式?”
气象局(WeatherService):客户端调用
被观察对象:地球(Earth)
publicclassEarthextendsObservable{
*/
publicStringgetWeather{
returnweather;
*被观察对象:地球
*/
=weather;
//设置变化点
privateStringweather=“晴朗”;
/***//**
/***//**
其他人正在读 :【都重生了谁考公务员啊】【凡人修仙:从废灵根开始】【重生就别当舔狗了】【拥有学习面板的神豪】【万倍返还,为师举世无敌】【陈浩苏雪】【龙王传说世界的天才玩家M】【战锤40k:碎裂钢魂】【怀上渣男死对头的娃后,我杀疯了】【人间第一刀】【周元赵蒹葭】【重生成汤姆猫,被女主人上交国家】【陨落星辰:】【断刃行】【世界首富之我是股神】【不眠春潮】【昭奚旧草】【从零开始建立穿越者联盟】【从零开始无限进化】【直播鉴宝,我竟成了国宝级专家?】【苍蓝星,亦是宝可梦大师!】【路人甲心声泄露后被反派全家团宠了】【摆烂太狠,我被宗门当反面教材了】【系统流主角的我加入聊天群】【黄昏分界】【这个诡异三国游戏太凶残了】【春盼莺来】【直播被剧透历史的千古一帝,今天也很尴尬】【狂武战王楚天河秦晓柔】【寄小读者】