首页 > 其他分享 >02观察者模式

02观察者模式

时间:2023-04-12 18:45:22浏览次数:31  
标签:02 temp WeatherData 观察者 模式 humidity pressure public

让对象保持消息灵通


需求

一个WeatherData对象负责追踪目前的天气状况(温度,湿度,气压)。希望你们能建立一个应用,有三种布告板,分别显示目前的状况、气象统计及简单的预报。当WeatherObject对象获得最新的测量数据时,三种布告板必须实时更新。而且,这是一个可以扩展的气象站,Weather-O-Rama气象站希望公布一组API,好让其他开发人员可以写出自己的气象布告板,并插入此应用中,我们希望能提供这样的API。

class WeatherData{
        public int getTemperature(){
        }
        public int getHumidity(){
        }
        public int getPressure(){
        }
        public void measurementsChanged(){
        //一旦气象测量更新,此方法会被调用
        }
}

实现1

public class WeatherData {
    // 实例变量声明
    public void measurementsChanged() {
       float temp = getTemperature();
       float humidity = getHumidity();
       float pressure = getPressure();
       currentConditionsDisplay.update(temp, humidity, pressure);
       statisticsDisplay.update(temp, humidity, pressure);
       forecastDisplay.update(temp, humidity, pressure);
    }
// 这里是其他WeatherData方法
}

缺点:

针对实现编程
对于每个新的显示,都得修改这份代码
没有办法在运行时添加/移除显示元素
没有封装改变的部分

观察者模式

观察者模式:定义对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新;

有几种不同的实现方法,大多数围绕着包括主题和观察者接口的类设计

类图:

第四个设计原则:为了交互对象之间松耦合设计而努力。

主题只知道观察者实现了某个接口(也就是Observer接口)
任何时候我们都可以增加新的观察者。也可以在任何时候删除某些观察者。
有新类型的观察者出现时,主题的代码不需要修改,
独立复用主题和观察者
改变主题/观察者其中一方,不会影响另一方

标签:02,temp,WeatherData,观察者,模式,humidity,pressure,public
From: https://www.cnblogs.com/yunshalee/p/17310807.html

相关文章

  • 2023年4月12日周三
    计划形势与政策提交准备任务书,前期报告,中期报告,ppt执行09点12分  开始15点44分  答辩完了,真操蛋。记录已解决想法问题可以在邀请和邀请链接那里加一个字段,使其只在项目创建者时可用或显示。。我想简单了,人家实现的更牛逼,直接没有成员管理这个页面,也没有邀请链接......
  • led灯什么型号芯片最好,AH2028车灯芯片方案
    LED恒流芯片AH2028是振邦微半导体推出的一款PWM工作模式、效率高、外设简单、内置功率MOS管,适用于3.6V~100V输入的高精度降压型LED恒流驱动芯片。输出功率可达20W,电流为1.5A。AH2028可实现全亮/半亮功能切换,通过MODE:全亮/半亮模式切换。AH2028的工作频率固定在130KHZ,内置的频率......
  • 对Docker容器进行取证 CSAW CTF 2022 DockREleakage
    题目信息这是一道非常简单的题目意思是在构建docker时,有些东西泄露了,需要我们在里面找到flag开始我们下载附件,然后解压压缩包tar-xvfdockREleakage.tar.gzx:提取v:显示所有过程f:指定文件这里有一些json文件,是docker构建时的核心文件,我们打开看看都是一行,读起来很不方便,我们格式化......
  • 漏洞-Oracle MYSQL Server 安全漏洞(CVE-2022-1292)
    https://blog.csdn.net/weixin_45839894/article/details/126158078openssl:relocationerror:openssl:symbolEVP_mdc2versionOPENSSinedinfilelibcrypto.so.1.1withlinktimereference建议先删掉/usr/bin/openssl......
  • PAT-basic-1028 人口普查 java c++
    一、题目某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月6日,所以超过200岁的生日和未出生的生日都是不合理的,应该被过......
  • PAT-basic-1029 旧键盘 java c++
    一、题目旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。输入格式:输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括......
  • 2023AI语音机器人的到来!
    AI语音机器人拉近了时代与科技的距离,打破传统营销,更加快速高效。V:xssh664具体有以下的特点自主学习,支持打断,智能训练真人录制专业话术,接通率更高支持转人工坐席或者实时人工介入自动保存通话记录、有语音、文字支持短息发送功能,精准寻找客户能够保存未拨通的电......
  • 2023.4.12——软件工程站立会议
    团队照片:站立会议内容:昨天做了什么?完成了团队第一阶段会议;今天要做什么?准备开始写具体代码实现;遇到什么问题?团队会议纪实和博客整理;......
  • INFO90002 A1
    INFO90002A12023s1 INFO900022023Semester1-ASSIGNMENT1Weighting:20%ofyourtotalassessmentGroupAssessment:Groupsoffour(4)studentsfromthesametutorialAssignmentdeadline:CheckCanvasAssignmentsubmission:CanvasCASESTUDY:ThePsiSocia......
  • UVa 706 / POJ 1102 LCD Display (模拟)
    706-LCDDisplayTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=647http://poj.org/problem?id=1102Afriendofyouhasjustboughtanewcomputer.Untilno......