c++ 工厂模式案例
工厂模式是一种创建对象的设计模式,它提供了一种将对象的实例化延迟到子类的机制。使用工厂模式可以降低代码之间的耦合度,提高代码的可维护性和可扩展性。
以下是一个简单的 C++ 工厂模式的示例,通过这个示例,我们将创建一个动物工厂,可以生成不同类型的动物对象。
#include <iostream>
#include <memory>// 抽象基类
class Animal {
public:virtual void speak() const = 0; // 纯虚函数virtual ~Animal() = default; // 虚析构函数
};// 具体产品类:狗
class Dog : public Animal {
public:void speak() const override {std::cout << "汪汪!" << std::endl;}
};// 具体产品类:猫
class Cat : public Animal {
public:void speak() const override {std::cout << "喵喵!" << std::endl;}
};// 工厂类
class AnimalFactory {
public:// 创建动物的工厂方法static std::unique_ptr<Animal> createAnimal(const std::string& type) {if (type == "Dog") {return std::make_unique<Dog>();} else if (type == "Cat") {return std::make_unique<Cat>();} else {return nullptr;}}
};int main() {// 使用工厂创建对象auto dog = AnimalFactory::createAnimal("Dog");if (dog) {dog->speak(); // 输出:汪汪!}auto cat = AnimalFactory::createAnimal("Cat");if (cat) {cat->speak(); // 输出:喵喵!}return 0;
}
代码说明:
- Animal:这是一个抽象基类,定义了一个纯虚函数
speak()
,所有具体动物类都要实现这个函数。 - Dog 和 Cat:这两个类是
Animal
的具体实现,分别实现了speak()
函数,输出不同的声音。 - AnimalFactory:这个类包含一个静态的工厂方法
createAnimal()
,根据传入的类型参数返回相应的动物对象。 - main 函数:在这里,我们通过
AnimalFactory
创建Dog
和Cat
对象,并调用speak()
方法输出各自的叫声。
通过这个简单的例子,我们可以看到工厂模式如何提供了一种灵活的对象创建方式,同时也降低了客户端代码对具体类的依赖。