C++ 工厂模式

2025年3月17日 | 阅读 3 分钟

工厂模式是一种在面向对象编程中使用的设计模式,它可以在不向客户端暴露实例化逻辑的情况下创建对象。换句话说,工厂模式为在超类中创建对象提供了接口,但允许子类更改将要创建的对象的类型。

C++ 是一种面向对象编程语言,它支持使用多态和抽象类实现工厂模式。要在 C++ 中实现工厂模式,我们首先需要创建一个抽象基类,它定义了工厂可以创建的所有对象的通用接口。这个抽象基类也称为“产品”接口。

说明

让我们以一个创建不同类型动物的简单程序为例。我们可以将抽象基类“Animal”定义如下:

“Animal”类是一个抽象基类,它定义了所有动物类型的通用接口。在这种情况下,接口包含一个名为“makeSound()”的方法。该方法被声明为纯虚函数,这意味着它在基类中没有实现,必须由其子类实现。析构函数也被声明为虚函数,这确保当我们使用指向基类的指针删除派生类的对象时,它们会被正确销毁。

接下来,我们可以通过创建实现“Animal”接口的具体类来创建不同类型的动物。例如,让我们创建两个具体类:“Cat”和“Dog”

“Cat”和“Dog”类都继承自“Animal”类并实现了“makeSound()”方法。

现在我们可以创建工厂类,它负责创建“Animal”类型的对象。工厂类应该能够创建任何派生自“Animal”类的对象。

“AnimalFactory”类是一个抽象基类,它定义了创建“Animal”类型对象的接口。接口包含一个名为“createAnimal()”的方法,它返回一个指向“Animal”对象的指针。该方法被声明为纯虚函数,这意味着它在基类中没有实现,必须由其子类实现。

现在我们可以创建实现“AnimalFactory”接口并创建不同类型动物对象的具体工厂类。例如,让我们创建两个具体工厂类:“CatFactory”和“DogFactory”

“CatFactory”和“DogFactory”类都继承自“AnimalFactory”类并实现了“createAnimal()”方法。该方法创建适当类型(“Cat”或“Dog”)的新对象,并返回指向基类“Animal”的指针。

完整代码如下:

输出

C++ Factory Pattern

结论

最后,我们可以使用工厂模式来创建不同类型的动物对象,而无需了解对象的具体实现细节。我们可以创建一个客户端类,它使用工厂来创建“Animal”对象。