一、意图

允许单一实体跨越多个领域而不会导致这些领域彼此耦合。

二、动机

当一个系统涉及到渲染,物理,声音,控制器输入等等...如果都写在一个类中,这个类就显得巨大且不易维护添加,高度耦合。

在使用并发的现代游戏中,为了让代码在多个线程上运行是至关重要的。将游戏分割为多线程的一种通用方法就是通过领域划分。在一个核上运行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——解耦模式(组件模式)相关推荐

  1. 游戏设计模式阅读笔记4——重访设计模式(原型模式)

    目录 1.<圣铠传说>例子 2.原型语言范式 现在有很多原型的术语,这里讨论的是传统的原型设计模式. 1.<圣铠传说>例子 但这种会产生众多的类,众多的引用,众多冗余,众多的副 ...

  2. 游戏设计模式阅读笔记19——优化模式(空间分区)

    目录 一.意图 二.动机 三.空间分区 1.适用场景: 2.实例代码 四.注意 1.划分是层次的还是平面的? 2.划分依赖于对象数量吗? 空间分区 · Optimization Patterns · ...

  3. 游戏设计模式阅读笔记11——行为模式(子类沙箱)

    目录 一.意图 二.动机 三.子类沙箱 1.适用场景: 2.缺点: 3. 优化: 4.可不写入基类的操作 子类沙箱是一种软模式,它表述了一个基本思路,但没有很多细节机制. 一.意图 用一系列由基类提供 ...

  4. 游戏设计模式阅读笔记18——优化模式(对象池模式)

    目录 一.意图 二.动机 三.对象池模式 四.实例代码 五.注意 1.对象和池耦合的问题 一.意图 放弃单独地分配和释放对象,从固定的池中重用对象,以提高性能和内存使用率. 二.动机 比如粒子系统的调 ...

  5. 游戏设计模式阅读笔记8——序列模式(游戏循环)

    目录 一.意图 二.动机 三.游戏循环 四.实例代码 1.能跑多快跑多快 2.休息一下 3.可以走一小步,也可以走一大步 4.固定时间刷新 五.目前的游戏循环 六.用电量相关 七.总结 1.固定时间步 ...

  6. java/android 设计模式学习笔记(8)---桥接模式

    这篇博客我们来介绍一下桥接模式(Bridge Pattern),它也是结构型设计模式之一.桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯或者使用,桥接模式的作用就是为被分离了的抽象部分 ...

  7. 设计模式学习笔记——抽象工厂(Abstract Factory)模式

    设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...

  8. 设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用

    一.工厂模式(Factory pattern) 工厂模式又叫做工厂方法模式,是一种创建型设计模式,一般是在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型. 1.1 工厂模式介绍 工厂模式是 ...

  9. 拿捏大厂面试,设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用

    一.工厂模式 工厂模式又叫做工厂方法模式,是一种创建型设计模式,一般是在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型. 1.1 工厂模式介绍 工厂模式是Java 中比较常见的一种设计模式 ...

最新文章

  1. asp.net 动态绑定html表格
  2. Vue.js组件学习
  3. html5绘制矩形动画,HTML5下绘制矩形教程
  4. java减治法深度优先查找_排序|减治法实现排序
  5. springboot中来进行文件下载
  6. eclipse配置tomcat,访问http://localhost:8080出现404错误
  7. 蓝桥杯-天干地支问题
  8. javascript将页面设为首页代码大全
  9. 世界十大工业自动化公司排名
  10. linux路由器还原,openwrt路由器恢复出厂设置的方法
  11. 车载网络: 常见车载网络
  12. STM32G0系列的启动配置与程序下载说明
  13. vscode上利用screen命令跑代码
  14. MATLAB 自动数独求解器(导入图片自动求解)
  15. 逻辑电路复杂?我们用Logisim一键解决
  16. RPA学习-数据表处理
  17. 量子 AI,是融合还是颠覆?
  18. 【分享】AlienWareM15R6键盘失灵
  19. 零成本“即用即走”的小程序,为什么没能留住用户
  20. java new collection_Java中的集合Collection

热门文章

  1. 关于“顾问之路”的探讨与总结
  2. 什么是类加载器,类加载器如何分类
  3. c++ (Qt MinGW32) 调用 python脚本
  4. 原生JS封装分页器组件
  5. STM32 C++编程系列二:STM32 C++代码封装初探
  6. python中使用缩进来体现代码之间的逻辑关系_Python使用缩进来体现代码之间的逻辑关系。...
  7. VS2008 Win7下安装 运行时系统必备失败 error1603
  8. 游戏跨服架构进化之路
  9. c加加语言三体问题,既然三体问题无法精确计算,行星的运行是否也不能精确?...
  10. 8年Android开发教你如何写简历,写给正在求职的安卓开发