В шаблоне наблюдателя лучше передавать данные в уведомлении, или наблюдатели обращаются к синглтону?

Фон

Я работаю над игрой для iOS в Swift, в которой есть обновления тем в реальном времени. Это в основном означает, что SKSpriteObjects меняют свой цвет при изменении темы. Когда я его реализую, я хотел бы сделать это так, чтобы это было хорошей практикой ООП и подходило для масштабируемости (много объектов делают это одновременно). У меня есть две идеи для этого:


Метод первый: уведомитель / наблюдатель + синглтон

-Зарегистрируйте все обновляемые SKSpriteObjects в качестве наблюдателей для ключа updateTheme. -Создайте синглтон с именем GameState с текущими цветами темы. -Когда запускается уведомление «updateTheme», каждый из наблюдателей будет обращаться к синглтону для своих новых цветов.

Метод второй: уведомитель / наблюдатель + переданный объект

-Зарегистрируйте все обновляемые SKSpriteObjects в качестве наблюдателей для ключа «updateTheme». -Объект, который запускает уведомление «updateTheme», создаст и присоединит к уведомлению объект, содержащий текущие атрибуты темы. -При обнаружении уведомления «updateTheme» каждый из наблюдателей развернет объект, а затем получит доступ к обновленным цветам этого развернутого объекта.


Вопрос

Хотя я считаю, что передача объекта в уведомлении - лучшая практика ООП, я полагаю, что все происходящее разворачивание не будет лучшей идеей для скорости. Поэтому я больше склоняюсь к одноэлементному подходу. Что ты думаешь? Возможно, есть лучший способ, о котором я не придумал, массово обновить все объекты в моей игре.


person jcdeichmann    schedule 15.10.2016    source источник


Ответы (1)


Ни в коем случае не синглтону.

Или, другими словами:

Если у вас есть два варианта, и один из них включает синглтон, выберите другой вариант.

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

Сказав это, рассмотрим еще одну альтернативу: это обычный шаблон для наблюдателей событий, который передает им в качестве первого параметра ссылку на объект, отправляющий уведомление. Так почему бы наблюдаемому не передать ссылку на себя наблюдателям, чтобы наблюдатели могли получить от наблюдаемого все, что им нужно?

person Mike Nakis    schedule 15.10.2016
comment
Я пойду по пути избегания синглтона и вместо этого передам ссылку на объект, который будет иметь любую информацию, необходимую наблюдателям. Спасибо за ответ! - person jcdeichmann; 17.10.2016