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

工厂模式是一种创建型设计模式,用来解决对象创建过程中的耦合问题。在C++中,通过工厂模式可以将对象的创建与使用分离,使代码更灵活、可扩展。下面介绍工厂模式的几种常见实现方式及其适用场景。
简单工厂模式(Simple Factory)
简单工厂并不是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();
工厂方法模式(Factory Method)
工厂方法模式将对象的创建延迟到子类。每个具体工厂负责创建对应的具体产品。
优点: 更符合开闭原则,新增产品时不需要修改已有工厂逻辑。
// 工厂基类class Factory {
public:
virtual ~Factory() = default;
virtual std::unique_ptr
};
// 具体工厂Aclass ConcreteFactoryA : public Factory {
public:
std::unique_ptr
return std::make_unique
原本这个程序只是本人两年前初学时练手的,最近拿出来进行了修改,所以叫XmxCms 企业网站管理系统2.0 开发环境:WinXP + VS2008 + SQLServer 2008 + Access开发语言:C#本程序采用 三层架构 + 抽象工厂设计模式 + Linq 实现,目前只做了Access 和 SQL Server ,默认数据库为Access,要更换数据库只需修改web.config 即可
}
};
// 具体工厂Bclass ConcreteFactoryB : public Factory {
public:
std::unique_ptr
return std::make_unique
}
};
客户端代码依赖抽象工厂:
std::unique_ptr
auto product = factory->createProduct();
product->use();
抽象工厂模式(Abstract Factory)
当需要创建一组相关或依赖对象时,使用抽象工厂模式。它提供一个接口用于创建一系列相关对象,而无需指定具体类。
典型场景: 不同主题的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();
选择合适的工厂模式
简单工厂适用于产品种类固定、变化少的情况。如果未来可能扩展新产品,推荐使用工厂方法模式。当需要创建一整套相互关联的产品对象时,应采用抽象工厂模式。
关键点是依赖抽象而非具体类,这样能有效降低模块间的耦合度,提高代码的可维护性和可测试性。
基本上就这些。掌握这三种工厂模式,就能应对大多数对象创建的设计需求。










