APP下载

“观察者模式”软件工程综合性实验设计

2022-05-27金强山冯光孙传国

计算机时代 2022年5期
关键词:综合性实验设计模式观察者

金强山 冯光 孙传国

摘  要: 针对“软件设计与体系结构”课程中设计模式的抽象性与复杂性,为了使学生能够更好的理解“观察者模式”的设计思路,设计了该综合性实验案例。该实验以温室蔬菜大棚中温度、湿度、CO2、光照的数据采集处理问题为实例,对实验目的、实验要求、实验环境、实验步骤做了详细介绍,目的是使学生掌握“观察者模式”的结构与原理,能够分析解决实际的问题。实践表明:通过综合性实验案例,能提升学生学习的主动性和对知识的掌握程度,培养学生分析问题、解决问题的能力。

关键词: 观察者; 设计模式; 综合性实验; 案例

中图分类号:TP311.1          文献标识码:A     文章编号:1006-8228(2022)05-105-04

Comprehensive experimental design for "Observer Pattern" software engineering

Jin Qiangshan, Feng Guang, Sun Chuanguo

Abstract: Aiming at the abstraction and complexity of design patterns in the course of "software design and architecture", in order to enable students to better understand the design idea of "Observer Pattern", this comprehensive experimental case is designed. Taking the data acquisition and processing of temperature, humidity, CO2, and light in a vegetable greenhouse as an example, the purpose of the experiment, experimental requirements, experimental environment, and experimental steps are introduced in detail. It enables students to master the structure and principle of "Observer Pattern" and be able to analyze and solve practical problems. Practice shows that through comprehensive experimental cases, students can not only improve their learning initiative and mastery of knowledge, but also cultivate their ability to analyze and solve problems.

Key words: observers; design mode; comprehensive experiment; case

引言

“軟件设计与体系结构”课程是软件工程专业的核心课程之一,主要在于提高设计者的开发效率与软件质量,使设计的软件更加灵活,具有可拓展性和可复用性。“设计模式”是“软件设计与体系结构”课程的重要内容,它主要解决面向对象系统中的类似的问题,建立整个设计方案,给出系统的名称和解释[1]。学生需要理解软件工程领域体系结构设计的基本思想,掌握面向对象设计的原则,灵活选择与应用软件设计模式,解决实际工程项目中存在的问题。

1 设计模式

设计模式[2]具有一定的抽象性和具体性,在软件开发的过程中,它联系着需求分析和系统实现,是沟通抽象设计和具体实现的桥梁。同时设计模式提高了软件的封装性和模块化,降低了对象之间的耦合性,改善了软件的可维护性和可拓展性。设计模式主要分为行为型、设计型、结构型三大类[3],其中观察者模式作为一种常用的、使用频率高的设计模式,它主要解决对象之间存在“一对多”的依赖关系,“一”发生变化时,“多”也能够自动发生变化的问题。

2 观察者模式

2.1 模式定义

观察者模式[4](Observer Pattern)意味着对象之间存在相互的依赖关系,当对象的状态发生变化时,可以自动通知和更新其依赖关系。即一个主题[5-6](Subject)同时被多个观察者[5-6](Observer)监听,当主题更改时,会通知多个观察者自动更新。观察者模式也称为订阅模式、模型视图模式和源侦听器模式[7]。

2.2 模式动机

观察者模式可以减弱对象之间的依赖关系,降低耦合度,而且这些低耦合的对象之间在行动上能够保持高度一致,彼此依赖减弱但能够相互提供服务。观察模式的对象之间彼此存在“1:n”的依赖关系,“1”发生变化,“n”收到通知自动更新;其中“1”(发生变化的对象)称为主题,“n”(被通知的对象)称为观察者[8]。主题和观察者之间存在“1:n”的依赖关系,但是观察者与观察者之间不存在彼此的联系,在具体的实际情况中,可根据需求增加和删除对象,极大的提升系统开发的拓展性。

2.3 模式结构

“观察者模式”的结构图[9-11]如图1所示,主要包括四种角色。

⑴ 抽象主题(Subject)

抽象主题指被观察者检测的对象。抽象主题一般定义为接口,也可以是抽象类。抽象主题中能够存储任意多个观察者,通过attach()和detach()方法可以增加和删除观察者;定义notify()方法通知观察者主题已发生变化,自动进行更新。

⑵ 具体主题(ConcreteSubject)

具体主题是抽象主题的实现类或子类,它实现了抽象主题中的抽象方法。通常它的状态信息发生变化时,向依赖于它的多个观察者会自动发送通知。

⑶ 抽象观察者(Observer)

抽象观察者也称为观察者,是指依赖于主题的对象。抽象主题通常被定义为一个接口,它定义了抽象update()方法,允许特定的观察者在发布主题时自动更新自己。

⑷ 具体观察者(ConcreteObserver)

具体观察者实现抽象观察者接口中定义的update()方法,它存储与主题相一致的状态,确保与主题保持高度一致与状态协调。

2.4 模式分析

观察者模式时序图[12,13]所示,在实际的使用过程中,首先创建具体观察者和具体主题,通过调用具体主题的attach(Observer observer)方法添加观察者,在同一个主题上可以添加多个观察者。其次,当使用setState()方法改变具体主题的状态后,会调用具体主题的notify()方法,通过notify()方法将会激活注册在此主题中具体观察者的update()方法,所有观察者将收到主题发送的通知,最后,观察者调用getState()方法获取具体主题的最新状态。

2.5 适用情景

针对具体的问题,如果存在以下的情况,可以选择观察者模式。

⑴ 在实际问题抽象的过程中,存在两个抽象的对象,一个对象的改变将导致其他一个或多个对象发生变化,但这个对象具体不知道有多少个对象需要更新数据[14-15],多个对象之间不存在联系,可以对多个对象进行添加和删除,降低了多个对象之间的耦合度。

⑵ 当一个对象的数据更新时需要通知其他对象,但这个对象不希望和被通知的那些对象形成紧耦合。

3 综合设计性实验案例

实验在Windows操作系统下,借助Eclipse快速开发实现温室蔬菜大棚温度、湿度、CO2、光照检测与预报,介绍综合设计性实验案例的设计。

3.1 实验目的

①理解和掌握观察者模式的运行原理;②能够利用观察者模式分析实际问题;③能够绘制观察者模式实例类图;④熟练掌握观察者模式的代码编写。

3.2 实验要求

利用观察者模式编寫程序,实现对温室蔬菜大棚温度和湿度的检测与预报,CO2的检测与预报,光照的检测与预报,分别显示在3个微型显示屏上,实验数据模拟温室蔬菜大棚传感器的输入。

3.3 实验环境

实验所使用的计算机为Inter(R)Core(TM)i5-4590、3.3GHz、4GB内存、Win7操作系统,使用JDK1.8、Eclipse4.7.2、StarUML3.2.2开发环境。

3.4 实验步骤

⑴ 分析问题,绘制类图。对现实问题进行抽象,明确各对象之间的关系,利用StarUML绘制类图,温室蔬菜大棚实例类图分析如图2所示。

⑵ 分析对象之间的动态交互过程,绘制时序图。对抽象的所有对象进行动态分析,利用StarUML绘制时序图,如图3所示。

⑶ 在Eclipse中新建项目Greenhouse,编写Subject接口和Observer接口。

⑷ 编写具体主题类GreenhouseData,实现Subject接口。

⑸ 编写三个具体观察者类TemHumObserver、CO2Observer、LightObserver,实现Observer接口和Screen接口。

⑹ 新建测试类Client,对程序进行测试。

3.5 实验结果

当温室蔬菜大棚中模拟传感器将数据获取到之后,三个显示屏会自动更新数据信息,以保证数据的时效性与及时预报,运行结果如图4所示。

4 结束语

通过“观察者模式”综合性设计实验案例,学生能够熟练掌握观察者模式的设计原理;在面对现实中的具体问题,能够利用观察者模式解决特定的问题,提升代码的复用性,降低对象之间的耦合性。在综合性设计实验案例的实施过程中,不仅考查了学生的编程能力,而且考查了学生对观察者模式的理解,提升了学生面向对象程序设计的能力,激发了学生学习程序设计的兴趣,夯实学生的专业基础。

参考文献(References):

[1] 李慧贞,郑恩让,张会生.电信管理网络中观察者模式的应用

研究[J].微电子学与计算机,2005(9):89-92

[2] 周宇,赵洪达,张倩雯.软件设计模式课程实验教学系统探索[J].

计算机系统应用,2017,26(5):86-90

[3] Freeman E, Robson E, Bates B, Sierra K. Head First

Design Patterns. US: O’Reilly Media,2004

[4] 陈萍萍,于卫红,陈燕.观察者模式中的“拉”模型在电子商务

系统中的应用[J].计算机时代,2014(9):49-51

[5] 李英军,马晓星,蔡敏等,译.设计模式:可复用面向对象软件

的基础[M].北京:机械工业出版社,2005:89

[6] 李亚岗,王启明.设计模式及其应用研究[J].伊犁师范学院

学报(自然科学版),2007(2):39-42

[7] 王海宾,白尚旺,党伟超,等.基于Observer模式的AS/RS调

度系统设计与实现[J].计算机技术与发展,2009,19(3):110-113,122

[8] 刘小凡.监测类软件设计中观察者模式浅析[J].仪器仪表与

分析监测,2016(4):5-8

[9] [美]ErichGamma等著.设计模式[M].机械工业出版社,2000

[10] 耿祥义.Java设计模式[M].清华大学出版社,2009

[11] 刘伟.设计模式(第2版)[M].清华大学出版社,2019

[12] ErichGamma,加马,李英军.设计模式:可复用面向对象

软件的基础[J].机械工业出版社,2000

[13] 狄斌.设计模式的研究及在图表类库中的应用[D].北京工

业大学,2009

[14] 刘凌云.观察者模式在面向抽象编程中的应用[J].计算机

与数字工程,2016,44(8):1474-1477,1522

[15] 欧阳宏基,杨卫忠,赵蔷.观察者模式在Java事件处理中的

应用研究[J].微处理机,2013,34(4):77-79

收稿日期:2021-10-11

*基金项目:教育部产学合作协同育人项目(202002254013); 新疆自治区高校本科教育教学研究和改革项目

作者简介:金强山(1990-),男,甘肃永昌人,硕士,新疆理工学院信息工程学院教学办主任,主要研究方向:软件工程、数据挖掘。

猜你喜欢

综合性实验设计模式观察者
“1+1”作业设计模式的实践探索
三维协同设计模式下的航天项目管理实践与展望
冷静而又理性的观察者——德国华人作家刘瑛访谈
交通机电工程设计模式创新探讨
RNA提取、定量及RT—PCR综合性实验在分子生物学检验技术教学中的实施
“信号分析与处理”课程群综合性实验设计研究
《食品生物化学》综合性实验开设
分子生物学创新实验教学模式的实践
互动式设计模式研究
观察者模式在Java 事件处理中的应用研究*