Я провожу около 2 часов, читая множество тем, связанных с фабрикой, и до сих пор не уверен, что это был бы правильный подход.
Вот в чем дело: у меня есть Враг класс, который содержит переменные-члены, такие как name _ и health _.Я хочу создать его экземпляры с разными значениями этих переменных-членов, и мой первый подход состоял в том, чтобы получить параметры из статического массива со свойствами:
Enemy::Enemy(int type) : name_(properties[type].name),
health_(properties[type].health)
{
...
}
Проблема в том, что я не могу проверитьесли массив properties уже заполнен.Мне нужно было бы проверить это извне, вызвав статическую функцию Enemy :: initArray () , но это нарушило бы инкапсуляцию класса Enemy .
Этовремя для создания фабрики, которая инициализирует массив properties в своем конструкторе?А затем создайте врагов с помощью:
Enemy* EnemyFactory::create(type);
Я прочитал, что обычно фабрики создаются, когда у вас есть сложные иерархии классов, или вызывающему фабрике нужно знать только интерфейс созданных классов.Мне нужна только инкапсуляция создания и проверки массива.Есть ли "более легкое" решение?
РЕДАКТИРОВАТЬ: Я постараюсь быть более ясным:
1.) Я думаю, я знаю как создать фабрику.Основной вопрос - есть ли альтернатива !
2.) Я не хочу устанавливать свойства внутри объекта, но использую списки инициализации.Если я сделаю первое, я могу просто проверить массив в конструкторе и вообще не нуждаться в фабрике.