0-3论软件设计模式及其应用、2016-已写(观察者通知,命令-控制指令,适配器-兼容,工厂-多种数据库)

是为了提高系统的可扩展性、可维护性和可重用性。以下是一些常见的设计模式及其在家居自动化系统中的应用:

  1. 单例模式(Singleton Pattern):用于确保系统中只有一个实例存在的情况,例如家居自动化系统中的中央控制器。通过使用单例模式,可以确保只有一个中央控制器实例,避免多个控制器之间的冲突。
  2. 观察者模式(Observer Pattern):用于实现对象之间的一对多依赖关系,当一个对象状态发生变化时,其依赖的对象会自动收到通知并进行相应的处理。在家居自动化系统中,可以使用观察者模式实现传感器与中央控制器之间的通信,当传感器检测到环境变化时,中央控制器会接收到通知并采取相应的控制策略。
  3. 命令模式(Command Pattern):用于将请求封装成对象,使得可以将请求的发送者和接收者解耦。在家居自动化系统中,可以使用命令模式实现对家电设备的控制。例如,将控制指令封装成命令对象,中央控制器可以根据用户的操作发送相应的命令对象给家电设备,而无需直接与具体的设备进行交互。
  4. 工厂模式(Factory Pattern):用于创建对象的接口,将对象的实例化过程封装在工厂类中。在家居自动化系统中,可以使用工厂模式创建各种类型的设备对象。例如,可以定义一个设备工厂类,根据用户的需求创建不同类型的设备对象,如灯光设备、温度传感器等。

工厂模式,多种数据库支持。

  1. 适配器模式(Adapter Pattern):用于将一个类的接口转换成客户端所期望的另一个接口。在家居自动化系统中,可以使用适配器模式实现不同设备之间的兼容性。例如,将不同厂商的设备接口适配成统一的接口,以便中央控制器可以统一管理和控制各种设备。
  2. 状态模式(State Pattern):用于封装对象的状态以及与状态相关的行为,并将其封装成独立的类。在家居自动化系统中,可以使用状态模式实现对家居环境的自动调节。例如,定义不同的环境状态类,如白天模式、夜晚模式等,中央控制器可以根据当前的环境状态选择相应的控制策略。

状态模式,监测雨天,雪天,晴天等不同状态,选择不同的清洁策略。

以上是设计模式在基于物联网的家居自动化系统中的一些应用。腾讯云提供了丰富的云计算产品和服务,可以帮助开发者构建和部署物联网应用。具体产品和服务的介绍请参考腾讯云官方网站:https://cloud.tencent.com/

13:10分开始

摘要

2022年,本人有幸参与了某公司光伏清洁机器人物联网项目的研发工作。该项目目标是构建一个集设备管理,用户管理,电站管理,运维管理,日志分析等功能的智能物联平台。本文以此项目为例,介绍软件的设计模式,以及设计模式在本项目中的应用。本项目中主要采用观察者模式实现报警的通知;采用命令模式实现光伏清洁机器人的控制;适应适配器模式实现对不同的光伏清洁机器人适配成统一的接口;适应单例模式,确保机器人控制器中,只存在一个实例。通过使用这些设计模式,完成了项目的设计、开发、部署、运行,使得项目具备良好的可扩展性,可修改性等特性。项目自上线以来,运行良好。

正文

2022年3月,浙江省某光伏清洁设备有限公司,根据公司规划和市场的反馈需求,决定开发光伏清洁机器人智能物联系统。随着光伏电站的建设和发展,由于多分布于较为偏僻的地方,灰尘,风沙等影响光伏板组件的清洁度,进而影响发电效率。然而人工清洁效率低下,费用高昂,光伏清洁机器人越来越得到重视,装机容量不断提高。初代产品设计采用工控机通过433M电台和区域内光伏清洁设备通信,通信质量较差,当多个机器人同时发送消息会造成数据丢掉,服务器后台采用单体架构,技术框架无法适应新的装机量和后续业务发展的新需求的迭代需求。因此对其进行升级改造,改造要求兼容之前的设备,且具备较好的扩展性和容量伸缩性。我在其中担任架构师,负责新系统的架构设计、实现。

架构采取典型的物联网式架构开发,分为设备感知层,网联连接层,应用层。设备感知层负责感知现场数据。网络连接层负责网络连接,和服务器后台建立通信,传递数据。应用层负责业务逻辑和人机交互展示。由于传统的结构化软件设计方法不符合面向对象的设计原则,无法很哈的实现高内聚和低耦合的要求。模块之间过于紧密,给软件扩展和维护带来很多困难。在这种情况下,设计模式的出现和广泛应用给问题的解决提供了一种有效的方法。

设计模式按照其目的可以分为创建型、结构型和行为型三种模式。创建型模式,主要负责对象的创建工作,程序在确定需要创建对象时,可以获得更大的灵活性,常见的创建型设计模式有单例模式,工厂方法,原型,抽象工厂,建造者模式。

结构型模式负责处理类或对象之间的关系,目标是用于构建更加庞大的系统,常见的结构型设计模式有适配器、桥接模式,过滤器模式,享元模式,带来模式,装饰器模式等。

行为型模式主要是关注对象之间的通信和交互,主要任务是对类或对象如何交互以及类或对象分配具体职责进行描述。常见的行为型模式有解释器模式,终结者模式,策略模式,备忘录模式,命令模式,职责链模式,中介者模式等11种模式。

这些设计模式都是经过反复适应的成熟方法,对优化软件结构,提高软件质量等具有重要的指导意义。在光伏清洁机器人智能物联系统开发过程中,我们综合使用了多种设计模式,本文着重对观察者模式,命令模式,适配器模式,单例模式等4种模式在项目中的具体应用进行介绍。

我采用的

1:观察者模式实现报警的通知;

用于实现对象之间的一对多依赖关系,当一个对象状态发生变化时,其依赖的对象会自动收到通知并进行相应的处理。在光伏清洁系统中,可以使用观察者模式实现传感器与中央控制器之间的通信,当传感器检测到环境变化时,中央控制器会接收到通知并采取相应的控制策略。

报警系统中,当监测到报警时候,将报警信息发送给相关人员,通知其对报警进行处理。

2:采用命令模式实现光伏清洁机器人的控制;用于将请求封装成对象,使得可以将请求的发送者和接收者解耦。在光伏清洁系统在中,可以使用命令模式实现对光伏清洁机器人的控制。例如,将控制指令封装成命令对象,中央控制器可以根据用户的操作发送相应的命令对象给清洁机器人,而无需直接与具体的设备进行交互。

3:适应适配器模式实现对不同的光伏清洁机器人适配成统一的接口;:用于将一个类的接口转换成客户端所期望的另一个接口。在光伏清洁机器人中,可以使用适配器模式实现不同设备之间的兼容性。例如,将不同类型的机器人设备接口适配成统一的接口,以便中央控制器可以统一管理和控制各种设备。

4:工厂模式,用于创建对象的接口,将对象的实例化过程封装在工厂类中。在光伏清洁系统中,使用工厂模式创建各种类型的设备对象。例如,可以定义一个设备工厂类,根据用户的需求创建不同类型的设备对象,如湿度设备、速度传感器等。

在实现不同种类的数据库连接时候,可以使用抽象工厂模式来实现。定义一个抽象工厂类,DatabaseFactory,根据不同的数据库类型,执行不同的连接数据库执行数据库语句,从而根据配置信息使用不同的数据库类型。

5适应单例模式,用于确保系统中只有一个实例存在的情况,例如光伏清洁机器人系统中的中央控制器。通过使用单例模式,可以确保只有一个中央控制器实例,避免多个控制器之间的冲突。

经过近15个月的项目开发,该光伏清洁机器人智能物联系统顺利投入使用,统因为较好的使用了设计模式,所以在开发阶段都很顺利,同时也让该系统的可扩展性、松耦合性、重用性、可修改性等等方面都达到了设计的要求。系统在2020年12月已正式上线,系统上线后,陆续接入了该公司的不同光伏电站的多台设备,到目前为止大半年时间接入的设备就已经达到了200多台,每天设备上报的数据量也达到了三白多万条。另外,系统运行也相对稳定,并未出过重大故障,还受到了公司领导和用户的一致好评。

设计模式的选用基本达到了预期的效果。首先是,这些设计模式都是一些常用的设计方法,在架构设计师、系统分析师、开发人员之间,形成了良好的沟通桥梁,大家很容易进行交流和沟通。其次,在使用设计模式过程中,软件的开发效率较高,能够节省开发成本。最重要的是,这些模式都是一些经过反复使用的成熟设计方案,符合面向对象中设计规范,比如:面向接口编程、里氏替换原则、单一职责原则、依赖倒转等设计原则,最大限度的提高软件的标准化,为日后的系统维护打下了很好的基础。

当然,我们在设计过程中,也存在一些问题和不足,不少开发人员在设计过程中,有时还是习惯于原有的设计方法,对模式的使用有些抵触。而且,这些设计模式在应用过程中,往往不是单独使用,需要对多个模式进行综合运用。这方面,我们还缺少相关的经验。所以,在以后的项目设计中,我们将继续应用各种设计模式,做到融会贯通,不拘一格的目标,争取能设计出更多的高质量软件项目。

相关推荐
小许学java2 小时前
Spring事务和事务传播机制
java·数据库·spring·事务
小无名呀2 小时前
视图(View)
数据库·mysql
lkbhua莱克瓦242 小时前
MySQL介绍
java·开发语言·数据库·笔记·mysql
teacher伟大光荣且正确2 小时前
关于Qt QReadWriteLock(读写锁) 以及 QSettings 使用的问题
java·数据库·qt
钱彬 (Qian Bin)2 小时前
项目实践13—全球证件智能识别系统(内网离线部署大模型并调用)
数据库·postgresql·fastapi·ubuntu24.04·离线部署·qwen3大模型
hgz07102 小时前
索引的原理
数据库
尋有緣3 小时前
力扣614-二级关注者
大数据·数据库·sql·oracle
TG:@yunlaoda360 云老大3 小时前
华为云国际站代理商的DDM支持哪些拆分算法?
数据库·算法·华为云
咕噜企业分发小米3 小时前
腾讯云向量数据库的HNSW索引具体是如何构建和优化的?
数据库·云计算·腾讯云