单例和“顺序执行”设计模式

时间:2018-09-24 03:16:44

标签: design-patterns singleton chain-of-responsibility

我正在使用以下Singleton设计模式为手机实现游戏库

Game.initialize("game_id")
.downloadMap()
.showMap()
.setAutoAdjustMapResolution(true)

我对Singleton&Builder设计模式没有问题,但是我的问题是

downloadMap() -> need to wait until initialize("game_id") // Network request
showMap -> waits until downloadMap() finishes// Network request
showMap -> depends on setAutoAdjustMapResolution(true)

我不知道在这种情况下可以采用哪种设计模式 我在考虑责任链,但不确定

请给我您的想法或建议。谢谢

1 个答案:

答案 0 :(得分:1)

您正在使用链接,但这与责任链模式完全不同。

责任链的想法是仅执行一项任务。链表(链)中有多个对象,每个对象都可以根据特定条件执行任务。用户在链的最前面发出execute()方法。如果条件不正确,则第一个对象将不会执行(),而是传递到链中的下一个对象,依此类推,直到其中一个成功执行()并返回。我不相信这就是您所需要的。

如果希望您的任务按预定义的顺序执行到完成,则可以使用链接(就像您已经完成的那样)或按顺序发出单独的命令。

如果您希望您的任务以某种复杂的顺序执行,并且根据先前命令的结果会发生许多变化,则可以使用状态模式。这很简单并且功能非常强大,其中每个 State 对象都能够执行任务并决定下一步要执行的任务,这取决于其自身任务的结果或可能取决于来自其他来源的输入。

如果您希望所有任务同时开始,而不是等待其他任务完成,那么您需要使用异步编程。您没有说出使用的是哪种编程语言,但是例如,在Javascript中,只需使用 promises 和其他结构(例如 sync await

任何语言的

异步编程意味着在单独的线程或进程中执行多个任务。这可能是简单的也可能是复杂的,具体取决于正在编程的内容以及任务的分离程度。如果任务使用共享资源(例如数据库打印机)或更新共享资源(例如文件或数据库记录),则可能需要在某些点同步任务,或者可能需要使用锁和其他方式。

我希望这会有所帮助,但是如果您需要更多详细信息,请询问或提供有关我们具体情况的更多详细信息。