我有一個程序是一項家庭作業。首先我們做了一個飛行模擬,在這裏我們分析了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