Абстрактный заводской вопрос - PullRequest
2 голосов
/ 28 октября 2009

Я пытаюсь понять шаблон проектирования Abstract Factory. У меня много проблем с этим. Я пытаюсь использовать следующий пример для разработки диаграммы классов UML:

Автомобильные дизайнеры могут проектировать много различных типов автомобилей. Автомобили могут иметь две двери или четыре двери. Автомобили могут быть полноприводными, или они могут быть полноприводными. Автомобили состоят из разных частей: колеса, двери, двигатель, трансмиссия и т. Д. Каждая часть имеет разные операции: например, трансмиссия может иметь first_gear (), second_gear (), third_gear (), third_gear (), reverse () , нейтральный ().

Автозапчасти (перечисленные выше) доступны в семействах: Honda, Jeep, Ford и т. Д.

Используя метод проектирования Abstract Factory, мне нужно разработать систему программного обеспечения, чтобы система могла легко менять автомобили из одного семейства в другое.

Вот то, о чем я думал до сих пор: наличие одной фабрики и нескольких абстрактных фабрик. Итак, абстрактные фабрики создают модель, тогда как фабрика создает детали ...

Кто-нибудь может помочь? Спасибо ..

Ответы [ 2 ]

5 голосов
/ 28 октября 2009

Шаблон проектирования для абстрактной фабрики означает, что у вас есть одна абстрактная фабрика и множество реализаций «фабрик», которые вытекают из нее.

В вашем случае у вас, вероятно, будет абстрактная фабрика под названием VehicleFactory, которая, в свою очередь, будет получена HondaFactory, JeepFactory, FordFactory. В вашем примере вы, вероятно, также имеете класс объектов, которые могут быть созданы из абстрактной фабрики. Пример: TwoDoorCar, FourDoorCar. Эти классы также будут абстрактными и имеют конкретные реализации, такие как Ford2Door, HondaFourDoor. Задача абстрактной фабрики - абстрагировать конструкцию этих конкретных объектов. Метод:

FourDoorCar VehicleFactory::CreateFourDoorCar() = 0;

будет иметь конкретные реализации, такие как:

FourDoorCar HondaFactory::CreateFourDoorCar() { return new HondaFourDoor(); }

Таким образом, все ваши методы создания будут определены на основе одной строки кода:

VehicleFactory factory = new HondaFactory();

вместо каждого места вы создаете новые четырехдверные и двухдверные машины. Надеюсь, это поможет.

3 голосов
/ 28 октября 2009

В шаблонах дизайна Head First есть отличный пример, попробуйте бесплатно ознакомиться с книгами Google. Они используют магазин пиццы вместо автомобильного завода, но та же самая идея. Учила меня шаблон отлично.

Шаблоны дизайна Head First

...