# DesignPattern.WeatherStationSystem **Repository Path**: menglinonline/DesignPattern.WeatherStationSystem ## Basic Information - **Project Name**: DesignPattern.WeatherStationSystem - **Description**: 设计模式气象站案例研究 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-10-28 - **Last Updated**: 2024-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: DesignPattern ## README 气象站案例研究 === 注:我对气象站的理解。 [TOC] # 1. 硬件平台 ## 1.1.1.0硬件平台 ## 1.2.2.0硬件平台 ![](asset/6.jpg) # 2. 角色 ## 2.1.调度器 主要任务:什么时候去读取传感器的监测值? ## 2.2.各种传感器 #### a.温度传感器 #### b.气压传感器 #### c....... 主要任务:监测天气的各种指标。 ## 2.3.用户界面 #### a.电脑显示屏 #### b.电视显示屏 #### c....... 主要任务:把从各种传感器读取到的监测值显示在输出界面上。 ![](asset/7.jpg) # 3.第1版调度器 ## 3.1.版本1调度器做了3件事 ### 3.1.1.进行调度 ### 3.1.2.读取温度传感器/气压传感器得到监测值(直接调用关系) ### 3.1.3.把读取到的监测值显示到用户界面上(直接调用关系) ## 3.2.版本1调度器可变部分 ### 3.2.1.传感器可变的(可变的:增加传感器,换个传感器) ### 3.2.2.读取速率可变的(可变的:我现在想10分钟读取1次温度) ### 3.2.3.用户界面可变的(可变的:我现在想用IPad去显示了) ![](asset/1.jpg) # 4. 第2版调度器 ## 4.1.本1调度器做了2件事 ### 4.1.1.进行调度 ### 4.1.2.读取温度传感器/气压传感器得到监测值(直接调用关系) ### 4.1.3.~~读取到的监测值显示到用户界面上(直接调用关系)(这个工作由传感器内部去做了)~~ ## 4.2.版本2调度器可变部分 ### 4.2.1.传感器可变的(可变的:增加传感器,换个传感器) ### 4.2.2.读取速率可变的(可变的:我现在想10分钟读取1次温度) ### 4.2.3.~~用户界面可变的(可变的:我现在想用IPad去显示了)~~ ![](asset/2.jpg) # 5.第3版调度器 ## 5.1.版本3调度器做了1件事 ### 5.1.1.进行调度 ### 5.1.2.~~读取温度传感器/气压传感器得到监测值(直接调用关系)~~ ### 5.1.3.~~读取到的监测值显示到用户界面上(直接调用关系)(这个工作由传感器内部去做了)~~ ## 5.2.版本3调度器可变部分 ### 5.2.1.~~传感器可变的(可变的:增加传感器,换个传感器)~~ ### 5.2.2.~~读取速率可变的(可变的:我现在想10分钟读取1次温度)~~ ### 5.2.3.~~用户界面可变的(可变的:我现在想用IPad去显示了)~~ ![](asset/3.jpg) # 6.第4版调度器 ### 把读取速率放入具体硬件平台调度器内部,但是引起的老问题是,调度器知道哪些传感器 ![](asset/8.jpg) # 7.主程序上端多处指定了具体硬件平台 ![](asset/4.jpg) # 8.最高值和最低值的管理策略和数据持久化的耦合 # 10.此案例中使用到了哪些设计模式? ## 10.1.观察者模式 ### 解了调度器和用户界面的耦合。 ## 10.2.模板方法模式 ### 温度/气压是否有变化检查逻辑“共性功能实现“,和读取温度“个性扩展”分开。 ## 10.3.观察者模式+适配器模式配合使用 ### 解了调度器和传感器的耦合。 ## 10.4.抽象工厂模式 ### 1次性把具体平台的对象都创建出来。 ## 10.5.代理模式 ### 解了最高值和最低值的管理策略和数据持久化的耦合,把原本职责混合分开。 # 11.一些思考 ## 11.1.代理模式和适配器模式很像,都是包了1层,有什么区别吗? ### 看问题的角度不同 #### a.代理模式包了1层是为了在原有功能的基础上进行透明式的扩展功能,且包装的方法名称等于被包装的方法名称。 #### b.适配器模式包1层是为了统一出口,大家都按照统一出口调用,且包装的方法名称一般不等于被包装的方法名称。 ## 11.2.观察者模式的缺点 ### 上端必须知道每1个观察者。 ## 11.3.模板方法模式的缺点 ### 限制了只能定义为类,不能定义为接口,因为有公共逻辑需要去做。