面向组件,状态机,消息驱动,三合一的编程模型

本文探讨了面向组件、状态机和消息驱动三种编程模型的特点,指出它们在游戏开发等领域的应用。通过将这三者结合,可以创建出原子化的组件,每个组件拥有自身状态并能发送和处理消息。这种模型允许自由组合组件,以灵活地描述和抽象现实世界中的系统。文章以C语言为例,展示了如何实现这一模型。
摘要由CSDN通过智能技术生成

在实践中,发现面向组件,状态机,消息驱动。如果整合起来的模型,能够更为自然和简单的进行抽象。当然这些都是以面向对象为基础,更进一步的抽象扩展。本文,先会分别介绍一下,面向组件,状态机,消息驱动的各自特点。然后,介绍如何整合三者。最后,给出代码示例。


第一,面向组件

在游戏开发中有些引擎会使用基于组件的架构。比如unity3d就是其中的典型。基于组件,有以下特性。

  • 基类Componet负责组件的生命周期和状态管理。
  • Entity对象,也就是unity里面的GameObject,负责管理Component组件。Entity对象拥有任意多个组件,这里是组合模式。
  • 所有的功能可以组件化,就是具体的功能继承Componet来实现,作为一个组件,可以复用到Entity对象上。
  • Entity做为一个功能的集合抽象,与其他Entity可以发生交互,或者消息交换。Entity的功能大多来自于可复用的Componet,功能绑定的力度需要具体由设计者决定。
  • Entity可以再运行时,动态的增加或者减少Componet,或者修改Componet的状态。
面向组件架构,倾向使用组合模式,通过组件来复用功能。其实,就是把通过继承得到的功能复用,拆散到组件里,然后组合起来使用。面向对象有以下几个问题。
  • 为了一个功能去继承,就获得了父类所有其它无用,甚至不想关的功能,造成冗余。
  • 当继承链超过3层的时候,对象职能无法保持单一,不便于记忆和使用。
  • 继承可以操作父类的某些属性,在继承链中各自对象的操作,可能带来潜在的冲突。
  • 面向对象一般是通过一个角度切入进行抽象,如果需要进行多层面的角度去抽象,面向对象很难划分对象结构去进行描述。
面向对象中的对象,是一种视角的抽象描述。我们如何去划分这个对象,至关重要,以及人为的去限制对象的边界。但现实世界,是多个角度,横看成岭侧成峰的,当用一个视角抽象对象的时候,换一个视角原来的抽象就会不兼容或是面目前非。

面向组件,这里的组
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值