《游戏编程模式》--解耦模式--学习

news/2025/2/7 16:40:59/

解耦模式

组件模式将一个实体拆成多个,解耦不同的领域。 事件序列解耦了两个互相通信的事物,稳定而且及时。 服务定位器让代码使用服务而无需绑定到提供服务的代码。

组件模式

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

在今日软件设计的趋势是尽可能使用组件代替继承。 不是让两个类继承同一类来分享代码,而是让它们拥有同一个类的实例

 模式

 单一实体跨越了多个领域。为了保持领域之间相互分离,将每部分代码放入各自的组件类中。 实体被简化为组件的容器

 何时使用

组件通常在定义游戏实体的核心部分中使用,但它们在其他地方也有用。 这个模式应用在在如下情况中:

  • 有一个涉及了多个领域的类,而你想保持这些领域互相隔离。

  • 一个类正在变大而且越来越难以使用。

  • 想要能定义一系列分享不同能力的类,但是使用继承无法让你精确选取要重用的部分。

事件队列

解耦发出消息或事件的时间和处理它的时间

模式

事件队列在队列中按先入先出的顺序存储一系列通知或请求。 发送通知时,将请求放入队列并返回。 处理请求的系统之后稍晚从队列中获取请求并处理。 这解耦了发送者和接收者,既静态及时

服务定位器

提供服务的全局接入点,避免使用者和实现服务的具体类耦合

模式

服务 类定义了一堆操作的抽象接口。 具体的服务提供者实现这个接口。 分离的服务定位器提供了通过查询获取服务的方法,同时隐藏了服务提供者的具体细节和定位它的过程。

服务器模式将依赖--在两块代码之间的一点耦合--推迟到运行时再连接,这有了更大的灵活度,能以更小的运行时开销,换取很大的灵活性

(如果用的不好会带来单例模式所有的缺点和更多的运行时开销)

记住

服务必须真的可定位

服务不知道谁在定位它

由于定位器是全局可访问的,任何游戏中的代码都可以请求服务,这就意味着服务必须在任何环境下正确工作

服务定位器 · Decoupling Patterns · 游戏设计模式 (tkchu.me)

时序耦合

两块分离的代码必须以正确的顺序调用才能让程序正确运行


http://www.ppmy.cn/news/72507.html

相关文章

开心档之MySQL 连接的使用

MySQL 连接的使用 在前几章节中,我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。 本章节我们将向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。 你可以在 SELECT…

单板硬件设计:存储器SD卡( NAND FLASH)

在单板设计中,无论是涉及到一个简易的CPU、MCU小系统或者是复杂的单板设计,都离不开存储器设计: 1、存储器介绍 存储器的分类大致可以划分如下: ROM和RAM指的都是半导体存储器,ROM在系统停止供电的时候仍然可以保持数…

CleanMyMac X如何下载解锁完整版本?

这是一款很受到mac用户喜爱的清理软件。不仅清理文件的步骤十分简单,电脑小白用户也可以高效清理Mac电脑。作为一款全方位保护电脑的软件,CleanMyMac已经不满足于只做简单的Mac清理工具,而是为mac用户提供更多的实用功能:优化系统…

【计算机网络学习资源汇总】

文章目录 引言1. 《计算机网络自顶向下》2. 《TCP/IP详解》 引言 做优秀资源的搬运工!读经典书籍,传承经典! 每个人的水平和理解不同,因此总结的水平也不同,推荐阅读一手资源,有时间尽量啃书。 发现好的资…

【EfficientDet】《EfficientDet:Scalable and Efficient Object Detection》

CVPR-2020 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 BiFPN4.2 EfficientDet 5 Experiments5.1 Datasets5.2 EfficientDet for Object Detection5.3 EfficientDet for Semantic Segmentation5.4 Ablation Study 6 Conclusio…

BurpSuite—-Target模块(目标模块)

前言 本文主要介绍BurpSuite—-Target模块(目标模块)的相关内容 关于BurpSuite的安装可以看一下之前这篇文章: http://t.csdn.cn/cavWt Target功能 目标工具包含了SiteMap,用你的目标应用程序的详细信息。它可以让你定义哪些对象在范围上为你目前的工…

【Linux 之五】 Linux中使用fdisk命令实现磁盘分区

最近由于工作的需要,初步研究了uboot中的fastboot实现方式。研究fastboot不可避免的需要了解磁盘分区的相关知识点,在linux下可以使用fdisk命令实现磁盘的分区。好了,下面步入正题。 1. 查看帮助信息(fdisk --help) …

浅谈Java中的NAN与INFINITY:数值迷失与无限可能

在Java中,NAN(Not-a-Number)和INFINITY(无穷大)是浮点数类型(float和double)的特殊值,用于表示特定的数值情况。以下是关于NAN和INFINITY的详细解释和示例代码: 1、NAN …