dynamic/modular "event" 系统使用哪种设计模式?
Which design pattern(s) to use for a dynamic/modular "event" system?
我正在尝试为我正在制作的游戏创建一种事件系统(缺乏更好的定义)。我需要做的是拥有一组(硬编码)'core' 函数,我可以以任意方式将它们 link 在一起并定义为 "event",然后我可以执行带有一些任意参数。
这些"events"如果硬编码的话会比较简单,f.ex。
hardcodedEvent(int this, int that){
coreFunc1(this);
coreFunc2(that);
coreFunc3(coreFunc4(this + that));
//etc...
}
但重点是它们需要是动态的和模块化的,这样您在理论上就能够以 flow-chart/diagram 类似的方式构造和表示这些事件(例如:
flow-chart 来自 3d 软件的编辑器)
最终,我需要这些事件是可序列化的,以便我可以将它们作为文件或 to/from 数据库保存和加载。
我看过回调、命令、观察者和状态机模式,但我不知道哪种模式最适合这样的事情,而且我对其中任何一个都没有太多了解之前。
对我来说,您已经想到了对您的问题有用的设计模式。这当然只是将它们组合起来的问题。
如果我理解得很好,您正在尝试使用一些事件(消息传递、信息交换等)和一些 save/load/log 逻辑(文件保存、数据库...)一些点。
State :对于具有模块化状态的状态机行为,根据您的 "flow chart" 描述似乎适合游戏,但不太适合事件系统
Observer : 对于一个publish/subscribe逻辑(信息共享,...)
Callback:对于松散耦合的日志系统(同步事物,记录到文件)
Command : 用于将请求封装为对象,这里用处不大
我会在列表中添加另外两个:
Decorator : 因为你的游戏组件,事件似乎是 "chainable" 模块化的方式(即:链接核心功能以制作更多进化的功能)
Builder :对于您想要从文件加载游戏的部分 - 它可以抓取您的文件并在已保存的状态下重新创建游戏,封装一个重载逻辑...
希望对您有所帮助。
我正在尝试为我正在制作的游戏创建一种事件系统(缺乏更好的定义)。我需要做的是拥有一组(硬编码)'core' 函数,我可以以任意方式将它们 link 在一起并定义为 "event",然后我可以执行带有一些任意参数。
这些"events"如果硬编码的话会比较简单,f.ex。
hardcodedEvent(int this, int that){
coreFunc1(this);
coreFunc2(that);
coreFunc3(coreFunc4(this + that));
//etc...
}
但重点是它们需要是动态的和模块化的,这样您在理论上就能够以 flow-chart/diagram 类似的方式构造和表示这些事件(例如: flow-chart 来自 3d 软件的编辑器)
最终,我需要这些事件是可序列化的,以便我可以将它们作为文件或 to/from 数据库保存和加载。
我看过回调、命令、观察者和状态机模式,但我不知道哪种模式最适合这样的事情,而且我对其中任何一个都没有太多了解之前。
对我来说,您已经想到了对您的问题有用的设计模式。这当然只是将它们组合起来的问题。
如果我理解得很好,您正在尝试使用一些事件(消息传递、信息交换等)和一些 save/load/log 逻辑(文件保存、数据库...)一些点。
State :对于具有模块化状态的状态机行为,根据您的 "flow chart" 描述似乎适合游戏,但不太适合事件系统
Observer : 对于一个publish/subscribe逻辑(信息共享,...)
Callback:对于松散耦合的日志系统(同步事物,记录到文件)
Command : 用于将请求封装为对象,这里用处不大
我会在列表中添加另外两个:
Decorator : 因为你的游戏组件,事件似乎是 "chainable" 模块化的方式(即:链接核心功能以制作更多进化的功能)
Builder :对于您想要从文件加载游戏的部分 - 它可以抓取您的文件并在已保存的状态下重新创建游戏,封装一个重载逻辑...
希望对您有所帮助。