学员故事
您现在所在的位置:首页>企业动态>学员故事

技术文章分享|吃透设计模式之观察者模式

编辑:学到牛牛IT培训    发布日期: 2023-06-15 09:11:25  

观察者(Observer)模式又称发布-订阅(Publish-Subscribe)模式,它描述的是一个一对多的关系,当一个对象改变时通知其他对应的观察对象做出对应的自动更新改变。类似我们读书时老师和学生的关系,学生就是观察者,老师就是被观察的对象,学生时刻注意着老师的状态变化而自动做出相应反应,用发布订阅来理解就是老师发布状态变化结果,学员订阅这些状态做出应对。


下面是观察者模式的UML图:


1.png


在实现观察者模式时主要就是要将观察者及观察主题的抽象接口定义好,将类的依赖关系转换到抽象的基类中去,这样就可以避免具体观察对象编译时的依赖关系,降低耦合;观察者就可以自动根据订阅的主题信息根据主题自动更新自己的状态。它的缺点在于当观察者较多时通知观察者时需要遍历而带来的性能开销,另外就是当观察者销毁前也需要被观察对象先删除观察者对象,不然遍历到已销毁对象会导致程序崩溃;

在实际的应用中常见的Qt中的信号与槽实现、MVC(模型视图控制)等都可以看成是一种观察者模式,我们这里以游戏中等级与装备、属性和技能为例构建了一个简单的观察者模式,等级就是具体的观察主题,而装备装备、属性和技能系统就可以看成是具体的观察者,我们可以自由的根据抽象的观察者接口去扩展更多具体观察者类;这些具体的观察者就可以根据观察的主题变化而自动适应更新。如下图等级的提升可带来属性、装备等的提升:


2.png


下面是具体的实现代码:


1. 抽象观察者类定义


3.png


2. 抽象被观察对象类定义


4.png

5.png


3. 具体被观察对象类定义:角色等级类


6.png


4. 具体观察者类定义,这里可自由扩展


7.png

8.png

640.png


5. 主函数功能测试代码


9.png

10.png

程序运行结果:


11.png

 

观察者模式也是一个非常常用的设计模式,需要我们多多熟悉,以上就是一个简单的实现测试,实际使用时可能会结合多种设计模式是的其结构变得复杂,所以就需要从最简单的开始,搞懂各种设计模式的结构及特点,才能真正做到融会贯通。


免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • 学员故事_用心为每一位学员服务-学到牛牛
    学员故事_用心为每一位学员服务-学到牛牛

    扫一扫,免费咨询

  • 学员故事_用心为每一位学员服务-学到牛牛
    学员故事_用心为每一位学员服务-学到牛牛

    微信公众号

  • 学员故事_用心为每一位学员服务-学到牛牛
学员故事_用心为每一位学员服务-学到牛牛

学一流技术,找高薪工作

学员故事_用心为每一位学员服务-学到牛牛

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问