哪种设计模式可用于动态/模块化事件"系统?

时间:2016-03-05 23:52:42

标签: design-patterns dynamic modularity

我试图为我正在制作的游戏创建一种事件系统(缺乏更好的定义)。我需要做的是拥有一套(硬编码的)核心'函数,我可以以任意方式链接在一起并定义为"事件"然后我可以使用一些任意参数执行。

这些"事件"如果它们是硬编码的话会比较简单,f.ex。

hardcodedEvent(int this, int that){
    coreFunc1(this);
    coreFunc2(that);
    coreFunc3(coreFunc4(this + that));
    //etc...
}

但重点是它们需要是动态的和模块化的,这样你才能在理论上以流程图/图表的方式构造和表示这些事件(例如: 来自3d软件的flow-chart编辑器

最终,我需要将这些事件序列化,以便我可以将它们保存并加载为文件或加载到数据库中。

我看过Callback,Command,Observer和State机器模式,但我不知道哪一个最适合这样的东西,而且我工作得很多以前任何一个。

1 个答案:

答案 0 :(得分:0)

对我而言,您必须考虑到对您的问题有用的设计模式。这当然只是将它们结合起来的问题。

如果我理解得很好,你会尝试用某些事件(消息,信息交换......)和某些保存/加载/日志逻辑(文件保存,数据库......)进行游戏

状态:对于具有模块化状态的状态机行为,根据您的“流程图”描述似乎适合游戏,但对于事件系统则更少

观察者:对于发布/订阅逻辑(信息共享,...)

回调:对于松散耦合的日志记录系统(同步事物,登录到文件)

命令:对于将请求封装为对象,可能在这里不太有用

我会在列表中添加另外两个:

装饰者:因为您的游戏组件,事件似乎是以模块化的方式“链接”(即:链接核心功能以制作更多进化的组件)

构建器:对于您要从文件加载游戏的部分 - 它可以抓取您的文件并在已保存的状态下重新创建游戏,封装重载逻辑。

希望它有所帮助。