Один или несколько абстрактных фабрик для создания объектов в иерархии наследования?
У меня есть следующий сценарий здоровья клуба (закодированный в C++ BTW):
Я хочу создать случайные объекты "Гость" и "Тренер" (так что у обоих будет случайное создание имен, но у гостя также будут данные случайного здоровья).
Я хочу иметь возможность создавать множество разных случайных генераторов различной сложности.
Столь очевидно, что для этого потребуется функция случайного имени генератора имени/фамилии, но я не уверен, как сохранить этот код в одном месте.
У меня могла бы быть абстрактная фабрика со всеми методами генерации (например, generateForename()), в которой могут использоваться все объекты, требующие случайной генерации. Но должен ли тренер иметь доступ к фабрике, которая может генерировать данные о состоянии здоровья, даже если она не имеет к ним никакого отношения?
Я также подумал о том, что для каждого класса есть абстрактная фабрика - так что для человека, для клиента, для гостя и для объектов есть свои суперклассы, передавая им соответствующую фабрику, но это звучит сложнее для ситуации.
Я новичок в этом, так что простите меня, если мой дизайн немного выключен.
Что вы предлагаете?
Я не уверен, что абстрактная фабрика - это то, что вы ищете. Абстрактная фабрика работает лучше всего, когда у вас есть тот же базовый класс, но вам нужно создавать разные конкретные экземпляры. Хотя у вас есть основной базовый класс Person, вам действительно нужно создать производные двух разных базовых классов.
Я бы постарался сохранить методы, которые генерируют данные вместе с классом, который содержит эти данные. Таким образом, его можно использовать повторно.
Не могли бы вы создать фабричный метод для Guest и Trainer, который затем сможет использовать методы в своих базовых классах для генерации данных? Может быть, создать подтемы, специфичные для тестирования, для того, чтобы сохранить материал теста от реальных вещей?
- Вопросы
- Software-design
- Один или несколько абстрактных фабрик для создания объектов в иерархии наследования?