设计模式系列往期精彩文章
还是老样子,无需求,不设计。更好的设计只是为了解决需求而诞生有这样的一个需求:(天气预报的项目)
普通解决方案: 通过对气象站项目的分析,我们可以初步设计出一个WeatherData类类图: 通过getXxx方法,可以让第三方接入,并得到相关信息. 当数据有更新时,气象站通过调用dataChange() 去更新数据,(第三方通过定时器的方式) 也可以推送 以上就是普通方案的大体解决思路,接下来直接上代码,来更好的理解。 推送的方式 CurrentConditions(显示当前天气情况(可以理解成是气象站自己的网站)) public class CurrentConditions { // 温度,气压,湿度 private float temperature; private float pressure; private float humidity; //更新 天气情况,是由 WeatherData 来调用,我使用推送模式 public void update(float temperature, float pressure, float humidity) { this.temperature = temperature; this.pressure = pressure; this.humidity = humidity; display(); } //显示 public void display() { System.out.println("***Today mTemperature: " + temperature + "***"); System.out.println("***Today mPressure: " + pressure + "***"); System.out.println("***Today mHumidity: " + humidity + "***"); }} WeatherData(核心类、含有 CurrentConditions 对象、当数据有更新时,就主动的调用 CurrentConditions对象update方法(含 display), 这样他们(接入方)就看到最新的信息) public class WeatherData { private float temperatrue; private float pressure; private float humidity; private CurrentConditions currentConditions; //加入新的第三方 public WeatherData(CurrentConditions currentConditions) { this.currentConditions = currentConditions; } public float getTemperature() { return temperatrue; } public float getPressure() { return pressure; } public float getHumidity() { return humidity; } public void dataChange() { //调用 接入方的 update currentConditions.update(getTemperature(), getPressure(), getHumidity()); } //当数据有更新时,就调用 setData public void setData(float temperature, float pressure, float humidity) { this.temperatrue = temperature; this.pressure = pressure; this.humidity = humidity; //调用dataChange, 将最新的信息 推送给 接入方 currentConditions dataChange(); }} Client public class Client { public static void main(String[] args) { //创建接入方 currentConditions CurrentConditions currentConditions = new CurrentConditions(); //创建 WeatherData 并将 接入方 currentConditions 传递到 WeatherData中 WeatherData weatherData = new WeatherData(currentConditions); //更新天气情况 weatherData.setData(30, 150, 40); //天气情况变化 System.out.println("============天气情况变化============="); weatherData.setData(40, 160, 20); }} 以上就是利用普通方法解决天气预报的一个功能,相信大家也看出来了其中的弊端: 无法在运行时动态的添加第三方 (XX 网站) 违反ocp原则 相关推荐 如何使用Python读取Exc Python中析构函数详解 关于vc6转vs2008的信息 如何在keil软件中输出程序【 vs2010 mfc背景图片_ 谷歌成立25年,Sundar 报道称,苹果改用 USB-C 微软Win11 Canary预 vs2012反向生成类图_vs vs2010项目停止工作了_ stm32测量交流电压电路(s 宁夏网站制作哪家公司好? 宁夏网站制作哪家公司好? 如何解决网站优化好坏问题 使用Wingy服务器轻松访问l 探索香港云服务器:轻松开始试用 选择云服务器带宽的技巧和建议( Excel中实用的快捷键“Ct 解决Excel过滤bug的4个 小龙打败面试官系列:组合模式 Nacos详情 【Solr】管理控制台的安装和 如何设置服装关键词排名 如何设置服装关键词排名
以上就是普通方案的大体解决思路,接下来直接上代码,来更好的理解。
推送的方式
public class CurrentConditions { // 温度,气压,湿度 private float temperature; private float pressure; private float humidity; //更新 天气情况,是由 WeatherData 来调用,我使用推送模式 public void update(float temperature, float pressure, float humidity) { this.temperature = temperature; this.pressure = pressure; this.humidity = humidity; display(); } //显示 public void display() { System.out.println("***Today mTemperature: " + temperature + "***"); System.out.println("***Today mPressure: " + pressure + "***"); System.out.println("***Today mHumidity: " + humidity + "***"); }}
public class WeatherData { private float temperatrue; private float pressure; private float humidity; private CurrentConditions currentConditions; //加入新的第三方 public WeatherData(CurrentConditions currentConditions) { this.currentConditions = currentConditions; } public float getTemperature() { return temperatrue; } public float getPressure() { return pressure; } public float getHumidity() { return humidity; } public void dataChange() { //调用 接入方的 update currentConditions.update(getTemperature(), getPressure(), getHumidity()); } //当数据有更新时,就调用 setData public void setData(float temperature, float pressure, float humidity) { this.temperatrue = temperature; this.pressure = pressure; this.humidity = humidity; //调用dataChange, 将最新的信息 推送给 接入方 currentConditions dataChange(); }}
public class Client { public static void main(String[] args) { //创建接入方 currentConditions CurrentConditions currentConditions = new CurrentConditions(); //创建 WeatherData 并将 接入方 currentConditions 传递到 WeatherData中 WeatherData weatherData = new WeatherData(currentConditions); //更新天气情况 weatherData.setData(30, 150, 40); //天气情况变化 System.out.println("============天气情况变化============="); weatherData.setData(40, 160, 20); }}
以上就是利用普通方法解决天气预报的一个功能,相信大家也看出来了其中的弊端: