Задать вопрос

Как называется паттерн, который добавляет объекту новый функционал?

Пишу свою игру в качестве хобби на юнити и разбираюсь в паттернах. Ситуация такая. Инициализирую игровой объект. Далее добавляю ему разные компоненты - типа компонентов здоровья, ближнего боя, дальнего боя, передвижение, прыжок, подбор лута и т.д. Фактически создание игрового объекта можно обернуть в классический Builder или фабрику.

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

gameObjectBuilder.AddSomeComponent1();
    gameObjectBuilder.AddSomeComponent2();
    gameObjectBuilder.AddSomeComponent3();
    var gameObject = gameObjectBuilder.Build();


Т.е. классический билдер возвращает НОВЫЙ построенный объект. Можно ли добавить в билдер сеттер, чтобы указать какой объект нужно "достроить"? Типа:

gameObjectBuilder.SetGameObject(gameObject);
    gameObjectBuilder.AddSomeComponent1();
    gameObjectBuilder.AddSomeComponent2();
    gameObjectBuilder.AddSomeComponent3();


Но в таком случае, у билдера метод `gameObjectBuilder.Build(); ` уже не нужен будет. И это уже не совсем билдер. Может есть название такому паттерну? Их же много придумали. Поиск на запрос "паттерн, который добавляет объекту новый функционал" предлагает декоратор, но это совсем не то - я ничего не обворачиваю.
  • Вопрос задан
  • 586 просмотров
Подписаться 2 Простой 2 комментария
Решения вопроса 2
GavriKos
@GavriKos
Программисты делятся на два типа - те которые знают и используют паттерны, и те которые не знают но все равно используют.

С учетом впецифики юнити, которая не допускает вообще нормального new компонентам, и специфики шарпа с отсутствием мультинаследования - какая разница что это? Читая заголовок я бы вообще сказал что это наследование (а что, добавление функционала).

Билдер - это как фабрика - это то что КОНСТРУИРУЕТ объект, а не сам объект. ИМХО.
Пилите игру. пофиг на имена.
Ответ написан
Далеко не у всего есть какое-то особое название (да и не должно быть).

У всяких списков тоже есть методы для добавления чего-то, но нету Build.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@DrRen7
Модификация объекта через сам объект это Fluent Interface, а вот добавление нового функционала что декоратор.
Разница в том при Fluent Interface AddSomeComponen(I) должна быть, а при декораторе как вы заметили просто обертка
Ответ написан
Комментировать
Adamos
@Adamos
По описанию - одному объекту наваливается куча ответственности, да еще динамически - больше похоже на нарушение S в SOLID и антипаттерн "Божественный объект".
Ответ написан
HemulGM
@HemulGM
Delphi Developer, сис. админ
ECS (Entity Component System) называется
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы