游戏设计模式阅读笔记13——解耦模式(组件模式)
一、意图
允许单一实体跨越多个领域而不会导致这些领域彼此耦合。
二、动机
当一个系统涉及到渲染,物理,声音,控制器输入等等...如果都写在一个类中,这个类就显得巨大且不易维护添加,高度耦合。
在使用并发的现代游戏中,为了让代码在多个线程上运行是至关重要的。将游戏分割为多线程的一种通用方法就是通过领域划分。在一个核上运行AI代码,在另一个上播放声音,在第三个上渲染等。
最简单的优化:将每个领域单独写成类。这些类被称为组件类。系统可以有多个组件类,但是他们之间互不知道彼此的存在。
在如今的软件设计趋势是:尽可能使用组件代替继承。不是让两个类继承同一类来分享代码,而是让它们拥有同一个类的实例。
三、组件模式详解
1.适用场景
1.需要分离一个涉及多个领域类的各个领域。
2.一个类很庞大且难以使用
3.想要定义一系列分享不同能力的类,但是使用继承无法让你精确选取要重用的部分。
组件模式通常可以增进性能和缓存一致性。 组件让使用数据局部性模式的CPU更容易组织数据。
2.代码示例
比如Bjorn类。在没有使用组件模式的时候,需要在Updata函数中实现所有领域的更新。
使用组件模式后:
在各个领域的类中实现updata的逻辑:
Bjorn类就变成了一个组件的集合,只需要自己去调用这几个类的updata函数就可以了。
这里还有的优化是使用指针来代替内联的实例。比如输入系统的实例换成输入系统的指针,就可以在演示系统的时候接入一个电脑演示的输入类。
3.对象如何获取组件
1.对象创建组件
i.保证对象总是可以拿到需要的组件
ii.重新设置对象比较困难
2.外部代码提供组件
i.对象更加灵活
ii.对象可以与具体的组件类型解耦。
4.组件之间如何通信
1.通过修改容器对象的状态
i.保持了组件的解耦
ii.需要将组件分享的任何数据存储在容器类中
(这样会浪费内存,如果将渲染专用的数据放入容器对象中,任何隐形对象都会无益地消耗内存)
iii.让组件的通信基于组件运行的顺序
2.通过他们之间的相互引用
让需要交流的组件相互引用,就可以直接交流,无需通过容器类。
i.简单快捷
ii.两个组件紧绑在一起
3.通过发消息
很复杂,会在容器类中建小小的消息系统,允许组件之间相互发送消息。
它有一个简单的receive()
方法,每个需要接受消息的组件类都要实现它。 这里,我们使用一个int
来定义消息,但更完整的消息实现应该可以附加数据。
然后,向容器类添加发送消息的方法。
注意:这里发送的消息,如果本体也监听了这个消息,本体也会收到。小心造成死循环。
i.同级组件解耦
ii.容器类很简单
游戏设计模式阅读笔记13——解耦模式(组件模式)相关推荐
- 游戏设计模式阅读笔记4——重访设计模式(原型模式)
目录 1.<圣铠传说>例子 2.原型语言范式 现在有很多原型的术语,这里讨论的是传统的原型设计模式. 1.<圣铠传说>例子 但这种会产生众多的类,众多的引用,众多冗余,众多的副 ...
- 游戏设计模式阅读笔记19——优化模式(空间分区)
目录 一.意图 二.动机 三.空间分区 1.适用场景: 2.实例代码 四.注意 1.划分是层次的还是平面的? 2.划分依赖于对象数量吗? 空间分区 · Optimization Patterns · ...
- 游戏设计模式阅读笔记11——行为模式(子类沙箱)
目录 一.意图 二.动机 三.子类沙箱 1.适用场景: 2.缺点: 3. 优化: 4.可不写入基类的操作 子类沙箱是一种软模式,它表述了一个基本思路,但没有很多细节机制. 一.意图 用一系列由基类提供 ...
- 游戏设计模式阅读笔记18——优化模式(对象池模式)
目录 一.意图 二.动机 三.对象池模式 四.实例代码 五.注意 1.对象和池耦合的问题 一.意图 放弃单独地分配和释放对象,从固定的池中重用对象,以提高性能和内存使用率. 二.动机 比如粒子系统的调 ...
- 游戏设计模式阅读笔记8——序列模式(游戏循环)
目录 一.意图 二.动机 三.游戏循环 四.实例代码 1.能跑多快跑多快 2.休息一下 3.可以走一小步,也可以走一大步 4.固定时间刷新 五.目前的游戏循环 六.用电量相关 七.总结 1.固定时间步 ...
- java/android 设计模式学习笔记(8)---桥接模式
这篇博客我们来介绍一下桥接模式(Bridge Pattern),它也是结构型设计模式之一.桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯或者使用,桥接模式的作用就是为被分离了的抽象部分 ...
- 设计模式学习笔记——抽象工厂(Abstract Factory)模式
设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...
- 设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用
一.工厂模式(Factory pattern) 工厂模式又叫做工厂方法模式,是一种创建型设计模式,一般是在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型. 1.1 工厂模式介绍 工厂模式是 ...
- 拿捏大厂面试,设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用
一.工厂模式 工厂模式又叫做工厂方法模式,是一种创建型设计模式,一般是在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型. 1.1 工厂模式介绍 工厂模式是Java 中比较常见的一种设计模式 ...
最新文章
- asp.net 动态绑定html表格
- Vue.js组件学习
- html5绘制矩形动画,HTML5下绘制矩形教程
- java减治法深度优先查找_排序|减治法实现排序
- springboot中来进行文件下载
- eclipse配置tomcat,访问http://localhost:8080出现404错误
- 蓝桥杯-天干地支问题
- javascript将页面设为首页代码大全
- 世界十大工业自动化公司排名
- linux路由器还原,openwrt路由器恢复出厂设置的方法
- 车载网络: 常见车载网络
- STM32G0系列的启动配置与程序下载说明
- vscode上利用screen命令跑代码
- MATLAB 自动数独求解器(导入图片自动求解)
- 逻辑电路复杂?我们用Logisim一键解决
- RPA学习-数据表处理
- 量子 AI,是融合还是颠覆?
- 【分享】AlienWareM15R6键盘失灵
- 零成本“即用即走”的小程序,为什么没能留住用户
- java new collection_Java中的集合Collection
热门文章
- 关于“顾问之路”的探讨与总结
- 什么是类加载器,类加载器如何分类
- c++ (Qt MinGW32) 调用 python脚本
- 原生JS封装分页器组件
- STM32 C++编程系列二:STM32 C++代码封装初探
- python中使用缩进来体现代码之间的逻辑关系_Python使用缩进来体现代码之间的逻辑关系。...
- VS2008 Win7下安装 运行时系统必备失败 error1603
- 游戏跨服架构进化之路
- c加加语言三体问题,既然三体问题无法精确计算,行星的运行是否也不能精确?...
- 8年Android开发教你如何写简历,写给正在求职的安卓开发