Все хорошего дня! Условия задачи следующие.
Есть класс представляющий человека. Его реализация в данном контексте не важна абсолютно. Человеку могут быть присвоены те или иные награды. Соответственно, награда - отдельный класс, скорее всего он будет абстрактным, и наследоваться в потомков (каждый потомок под определенный тип награды).
Проблема в следующем. Все пять порождающих паттернов которые мы можем лицезреть в банде четырех - работают касательно свойств типа isCallable, isDrawable и т.д., то есть по сути дела мы, объявляя такого рода свойства, говорим какой интерфейс реализован у данного класса. Даже если т.с. с гуманитарной точки зрения посмотреть - "подвижный"="может двигаться", "съедобный"="можно съесть" и т.д.... В моем случае с наградами сей эпитет неуместен - потому что получается что-то типа "зеленый" = "?", "высокий" = "?" и т.д. Если более конкретно - в классе наград есть такие свойства как "когда получена", "кем выдана", "тип награды", "удостоверяющий документ", "номер удостоверяющего документа" и т.п., и такого типа поля варьируются в зависимости от типа награды (какие-то должны быть включены в класс какие-то нет). Насколько уместно применение абстрактной фабрики, строителя или прототипа (и если да, то что именно использовать?), нужны ли здесь паттерны и целесообразно ли здесь вообще использование ООП?
ИМХО, вы заморачиваетесь. Тут достаточно паттерна "стратегия". Фабрики и строители нужны для крупных проектов, которые планируется долго поддерживать и расширять, прототип вообще не в тему тут - он нужен, когда копировать существующий объект проще, чем конструировать новый (например, при наличии множества вычисляемых полей).