抽象工厂问题

时间:2009-10-28 18:55:07

标签: design-patterns uml factory-pattern class-diagram

我试图了解抽象工厂设计模式。我遇到了很多麻烦。我试图使用以下示例来开发UML类图:

汽车设计师可以设计许多不同类型的汽车。汽车可以有两扇门,也可以有四扇门。汽车可以是四轮驱动,也可以是两轮驱动。汽车由不同的部件组成:车轮,车门,发动机,变速箱等。每个部件都有不同的操作:例如,变速器可以有first_gear(),second_gear(),third_gear(),fourth_gear(),reverse() ,中立()。

汽车零件(如上所列)可在家庭中使用:本田,吉普,福特等。

使用抽象工厂设计方法,我需要开发一个软件系统,以便系统可以轻松地将汽车从一个家庭转换到另一个家庭。

这是我到目前为止所想的:拥有一个工厂和多个抽象工厂。因此,抽象工厂创建模型,而工厂创建零件......

有人可以帮忙吗?感谢..

2 个答案:

答案 0 :(得分:5)

抽象工厂的设计模式意味着您有一个抽象工厂和许多从它派生的“工厂”实现。

在你的情况下,你可能有一个名为VehicleFactory的抽象工厂,后者又由HondaFactory,JeepFactory,FordFactory派生。在您的示例中,您可能还有一类可以从抽象工厂创建的对象。例如:TwoDoorCar,FourDoorCar。这些类也是抽象的,并且具有像Ford2Door,HondaFourDoor这样的具体实现。抽象工厂的要点是抽象出这些具体对象的构造。方法:

FourDoorCar VehicleFactory::CreateFourDoorCar() = 0;

将具有以下具体实现:

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

这样,所有的创建方法都将基于一行代码来决定:

VehicleFactory factory = new HondaFactory();
而不是每个地方你创造新的四门和两门车。 希望有所帮助。

答案 1 :(得分:3)

Head First设计模式中有一个完美的例子,可以免费在Google图书上查看。他们使用披萨店而不是汽车厂,但想法相同。完美地教我了这个模式。

Head First Design Patterns