工厂模式通过分离对象创建与使用来降低耦合。简单工厂用静态方法创建不同产品,适用于种类固定的场景;工厂方法模式通过子类决定实例化哪个类,支持扩展;抽象工厂则用于创建一组相关产品,适用于需要统一管理多组对象的场景。三种模式均依赖抽象,提升代码灵活性和可维护性。

工厂模式是一种创建型设计模式,用来解决对象创建过程中的耦合问题。在C++中,通过工厂模式可以将对象的创建与使用分离,使代码更灵活、可扩展。下面介绍工厂模式的几种常见实现方式及其适用场景。
简单工厂并不是23种设计模式之一,但它是理解工厂模式的基础。它通过一个单独的工厂类来决定创建哪种具体产品。
核心思想: 定义一个工厂类,提供一个静态方法,根据参数返回不同类型的对象。
// 产品基类class Product {
立即学习“C++免费学习笔记(深入)”;
public:
virtual ~Product() = default;
virtual void use() const = 0;
};
// 具体产品Aclass ConcreteProductA : public Product {
public:
void use() const override {
std::cout
}
};
// 具体产品Bclass ConcreteProductB : public Product {
public:
void use() const override {
std::cout
}
};
// 工厂类class SimpleFactory {
public:
static std::unique_ptr
switch (type) {
case 'A': return std::make_unique
case 'B': return std::make_unique
default: throw std::invalid_argument("Unknown product type");
}
}
};
使用时只需调用工厂方法:
auto product = SimpleFactory::createProduct('A');
product->use();
工厂方法模式将对象的创建延迟到子类。每个具体工厂负责创建对应的具体产品。
优点: 更符合开闭原则,新增产品时不需要修改已有工厂逻辑。
// 工厂基类class Factory {
public:
virtual ~Factory() = default;
virtual std::unique_ptr
};
// 具体工厂Aclass ConcreteFactoryA : public Factory {
public:
std::unique_ptr
return std::make_unique
}
};
// 具体工厂Bclass ConcreteFactoryB : public Factory {
public:
std::unique_ptr
return std::make_unique
}
};
客户端代码依赖抽象工厂:
std::unique_ptr
auto product = factory->createProduct();
product->use();
当需要创建一组相关或依赖对象时,使用抽象工厂模式。它提供一个接口用于创建一系列相关对象,而无需指定具体类。
典型场景: 不同主题的UI组件(按钮、文本框等)。
// 抽象产品:按钮class Button {
public:
virtual ~Button() = default;
virtual void click() const = 0;
};
// 具体按钮Aclass WinButton : public Button {
public:
void click() const override {
std::cout
}
};
// 抽象工厂class GUIFactory {
public:
virtual ~GUIFactory() = default;
virtual std::unique_ptr
};
// Windows风格工厂class WinFactory : public GUIFactory {
public:
std::unique_ptr
return std::make_unique
}
};
使用方式:
std::unique_ptr
auto button = factory->createButton();
button->click();
简单工厂适用于产品种类固定、变化少的情况。如果未来可能扩展新产品,推荐使用工厂方法模式。当需要创建一整套相互关联的产品对象时,应采用抽象工厂模式。
关键点是依赖抽象而非具体类,这样能有效降低模块间的耦合度,提高代码的可维护性和可测试性。
基本上就这些。掌握这三种工厂模式,就能应对大多数对象创建的设计需求。
以上就是c++++ 如何实现一个工厂模式_c++设计模式之工厂模式讲解的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号