我有一个程序是一项家庭作业。首先我们做了一个飞行模拟,在这里我们分析了xml文件来加载飞机,城市和航班。所有的飞机都有巡航速度,巡航高度等。每个航班都有一个开始时间。我们创建了一个计时器功能,并跟踪时间以了解何时起飞和着陆飞机。在C++中努力实现抽象工厂模式
现在,教官要求我们实施创建飞机的抽象工厂模式,并且我通常理解它是如何工作的......但我似乎无法实现它。
另外,教官告诉我们要将工厂实施为单身人士。
我不明白的是:
我会在哪里实例化的工厂?我有一个装载程序,它将xml中的数据加载到容器类中。我假设我想一次创建一个工厂,然后从xml中获得所有这种类型的飞机......并为所有工厂做这件事。
由于在平面的不同“类型”中确实没有区别,除了直接创建对象之外,还有什么类型的方法接口?
下面是一些示例代码:一个XML飞机
<PLANE>
<MAKE>
Gulfstream 150
</MAKE>
<TYPE>
BUSINESSJET
</TYPE>
<DESCRIPTION>
Business Jet
</DESCRIPTION>
<RATEOFCLIMB>
1500
</RATEOFCLIMB>
<WINGSPAN>
55
</WINGSPAN>
<LENGTH>
56
</LENGTH>
<CRUISESPEED>
528
</CRUISESPEED>
<CRUISEALTITUDE>
41000
</CRUISEALTITUDE>
</PLANE>
的
实施例以用于类型
enum AircraftType {NOTYPE, PASSENGERJET, BUSINESSJET, SINGLEENGINE};
飞机类的枚举:
class Aircraft
{
private:
char make[32];
char model[32];
double cruiseSpeed;
double cruiseAltitude;
double climbRate;
double wingspan;
double fuselageLength;
public:
Aircraft(void);
Aircraft(AircraftFactory*);
~Aircraft(void);
};
抽象工厂类
class AircraftFactory
{
public:
AircraftFactory();
~AircraftFactory();
};
两个子类例如
class BusinessJetFactory: public AircraftFactory
{
private:
BusinessJetFactory();
public:
~BusinessJetFactory();
static BusinessJetFactory* getInstance();
};
class PassengerJetFactory: public AircraftFactory
{
private:
PassengerJetFactory();
public:
~PassengerJetFactory();
static PassengerJetFactory* getInstance();
};
xml拥有航班和城市。所以在之前的程序中。我创建了3个矢量容器。一个用于飞机,城市和航班。这些航班拥有关于何时起飞的信息以及将航班连接到哪个飞机/起飞/目的地。但我仍然不明白为什么抽象工厂在这里很好。 – user2079828
@ user2079828:哦,是的,这很好。因为你有飞机,城市和航班。完美的案例。您需要为每种类型实例化一个工厂。但不像你在你的问题中所做的那样,没有专门的公务机和passenjer飞机工厂。只有一架飞机,一架飞往城市,一架飞机。这使得1个抽象工厂类和3个具体工厂在init函数中“创建”(通过模板实例化)。 –
你在说什么不符合我的要求。这里是指令: 飞机的创建必须按照抽象工厂设计模式按照AircraftFactory类的子类进行分离和处理。 AircraftFactory将有三个子类,分别用于创建客机,公务机和单引擎飞机。工厂将创建适当类型的飞机,为其创建的飞机类型的所有参数设置适当的值。每个工厂都会返回指向Aircraft对象的指针。 – user2079828