Синглтон и шаблоны проектирования "последовательное выполнение"
Я реализую игровую библиотеку для мобильных устройств, используя шаблон проектирования 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.
Асинхронное программирование на любом языке означает выполнение нескольких задач в отдельных потоках или процессах. Это может быть простым или сложным в зависимости от того, что программируется и насколько отдельные задачи. В определенных точках может потребоваться синхронизация задач или использование блокировок и других средств, если они используют общие ресурсы (например, принтер базы данных) или обновляют общие ресурсы (например, файл или запись базы данных).
Я надеюсь, что это немного поможет, но если вам нужно больше подробностей, просто спросите или предоставьте более подробную информацию о нашей конкретной ситуации.