我试图了解抽象工厂设计模式。我遇到了很多麻烦。我试图使用以下示例来开发UML类图:
汽车设计师可以设计许多不同类型的汽车。汽车可以有两扇门,也可以有四扇门。汽车可以是四轮驱动,也可以是两轮驱动。汽车由不同的部件组成:车轮,车门,发动机,变速箱等。每个部件都有不同的操作:例如,变速器可以有first_gear(),second_gear(),third_gear(),fourth_gear(),reverse() ,中立()。
汽车零件(如上所列)可在家庭中使用:本田,吉普,福特等。
使用抽象工厂设计方法,我需要开发一个软件系统,以便系统可以轻松地将汽车从一个家庭转换到另一个家庭。
这是我到目前为止所想的:拥有一个工厂和多个抽象工厂。因此,抽象工厂创建模型,而工厂创建零件......
有人可以帮忙吗?感谢..
答案 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图书上查看。他们使用披萨店而不是汽车厂,但想法相同。完美地教我了这个模式。