Синглтон и шаблоны проектирования "последовательное выполнение"

Я реализую игровую библиотеку для мобильных устройств, используя шаблон проектирования 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 ответ

Вы используете цепочку, но это полностью отличается от схемы цепочки ответственности.

Идея цепочки ответственности заключается в том, что выполняется только одно задание. В связанном списке (цепочке) есть несколько объектов, каждый из которых может выполнять задачу в зависимости от конкретных условий. Пользователь запускает метод execute() в начале цепочки. Если условия не верны, первый объект не будет выполнен (), а вместо этого перейдет к следующему объекту в цепочке и так далее, пока один из них не выполнит успешно () и не вернется. Я не верю, что это то, что вам нужно.

Если вы хотите, чтобы ваши задачи выполнялись до завершения в заранее определенной последовательности, вы можете использовать цепочку (как вы это сделали) или выдавать отдельные команды в последовательности.

Если вы хотите, чтобы ваши задачи выполнялись в каком-то сложном порядке, многие из которых меняются в зависимости от результата предыдущих команд, вы можете использовать Шаблон состояния. Это просто и достаточно эффективно, когда каждый объект State способен выполнить задачу и решить, какую задачу следует выполнить дальше, в зависимости от результата своей собственной задачи или, возможно, в зависимости от ввода из другого источника.

Если вы хотите, чтобы все ваши задачи запускались одновременно, а не ожидали завершения других, вам нужно использовать асинхронное программирование. Вы не сказали, какой язык программирования вы используете, но в Javascript, например, это можно сделать просто с помощью обещаний и других конструкций, таких как sync и await.

Асинхронное программирование на любом языке означает выполнение нескольких задач в отдельных потоках или процессах. Это может быть простым или сложным в зависимости от того, что программируется и насколько отдельные задачи. В определенных точках может потребоваться синхронизация задач или использование блокировок и других средств, если они используют общие ресурсы (например, принтер базы данных) или обновляют общие ресурсы (например, файл или запись базы данных).

Я надеюсь, что это немного поможет, но если вам нужно больше подробностей, просто спросите или предоставьте более подробную информацию о нашей конкретной ситуации.

Другие вопросы по тегам