Это хороший пример частей шаблона.Базовая конструкция объектов является достойным примером, однако логика основана на единственном перечислении Computer.ComputerType
.Это перечисление должно заранее знать каждый тип компьютера, выставляемого каждой фабрикой.
Часто мотивация для использования абстрактной фабрики состоит в том, чтобы абстрагировать этот тип жестко закодированных требований от картинки.Вместо одного перечисления может быть лучше добавить класс ComputerType
и позволить фабрике возвращать коллекцию доступных типов.Затем вы могли бы использовать ComputerType
, возвращаемый для создания новых систем.
Это позволяет вам добавлять другие фабрики без изменения вашего API, что является одним из основных преимуществ абстрактного шаблона фабрики.Прочтите Абстрактный шаблон фабрики - один из основных пунктов:
Клиент не знает (или не заботится), какие конкретные объекты он получает от каждой из этих внутренних фабрик.поскольку он использует только общие интерфейсы своих продуктов.
В этом случае вы «жестко кодируете» известные типы в enum, что нарушает эту часть шаблона.