gpt4 book ai didi

c++ - 努力在 C++ 中实现抽象工厂模式

转载 作者:行者123 更新时间:2023-11-28 07:14:21 26 4
gpt4 key购买 nike

我有一个程序是家庭作业。首先我们做了一个飞行模拟,我们在其中解析 xml 文件以加载飞机、城市和航类。所有飞机都有巡航速度、巡航高度等信息。每次飞行都有开始时间。我们创建了一个计时器功能并跟踪时间以查看何时让飞机起飞和降落。

现在,讲师要求我们实现用于创建飞机的抽象工厂模式,我大致了解它是如何工作的……但我似乎无法实现它。

此外,讲师告诉我们将工厂实现为单例。

我不明白的是:

  1. 我应该在哪里实例化工厂?我有一个将数据从 xml 加载到容器类的加载器。我假设我想一次创建一个工厂,然后从 xml 中获取该类型的所有飞机...并对所有工厂执行此操作。

  2. 既然平面的不同“类型”确实没有区别,那么除了直接创建对象之外,我还能创建什么样的方法接口(interface)?

下面是一些示例代码:

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();
};

最佳答案

通常使用工厂是因为您有一个可以在字符串(包含类型名称或类型 ID)(这是您在数据源中找到的字符串)和 C++ 类型之间进行匹配的映射。您在工厂初始化时在主函数中硬编码此对应关系。您使用一个“抽象”基工厂类和一个从基类派生的模板工厂。全局(单例)容器,只是工厂的映射(将字符串绑定(bind)到工厂),这就是硬编码很重要的地方,您将实例化(C++ 术语“从模板实现具体类”)每个必要类型的工厂.一个工厂有一个 make 函数,它只返回一个 T*(T 是工厂的模板类型,巧合的是对象的类型它可以创建)。所有这些工厂都存储在映射中,映射被称为多态容器。 make 函数是虚拟的,映射仅包含指向基础工厂的指针,但由于其中包含的实际对象在调用 auto newobject 时每个都知道其真正的 make 函数(通过虚拟表) = factorymap["passenger"]->make() 您将获得您在工厂的硬编码 init 中指定的类型的新实例,该实例位于 map 的“值”(key_value 的一侧)对于这个元素。

现在这个练习似乎不适合这个,因为就像你说的,只有一种类型的飞机,所以你不需要任何工厂。除非你的 xml 包含飞机以外的东西,比如机场、乘客、跑道、控制塔、航空公司......

关于c++ - 努力在 C++ 中实现抽象工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20461551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com