Я работаю над простым игровым дизайном, и я хотел разбить свои игровые объекты на более повторно используемые компоненты. Но я застрял на том, как именно реализовать дизайн, который я имею в виду. Вот пример:
У меня есть объект Logger, задача которого просто хранить список сообщений и отображать их на экране. Вы знаете, ведение журнала. Первоначально Logger просто содержал список, а игровой цикл отображал его содержимое. Затем я переместил логику рендеринга в метод Logger.Draw (), и теперь я хочу переместить ее дальше в объект LoggerRenderer.
По сути, я хочу, чтобы игровой цикл вызывал RenderAll, который затем будет вызывать Logger.Render, который, в свою очередь, вызовет LoggerRenderer.Render и, наконец, выведет текст. Таким образом, Logger должен содержать объект Renderer, но для визуализации Renderer необходим доступ к состоянию Logger (очереди сообщений).
Как мне решить это? Должен ли я передавать в очередь сообщений и другую информацию о состоянии явно в метод Render? Или игровой цикл должен вызывать Renderer напрямую и он связывается с логгером, но метод RenderAll фактически никогда не видит сам объект логгера?
Это похоже на шаблон командования, но я ужасно испортил его.