Синглтон и шаблоны проектирования «последовательного исполнения» - PullRequest
0 голосов
/ 24 сентября 2018

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

Вы используете цепочку , но это полностью отличается от цепочки ответственности * шаблон 1004 *.

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

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

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

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

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

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

...