工厂方法模式通过虚函数将对象创建延迟到子类,实现解耦;C++中以抽象工厂定义接口,具体工厂创建具体产品,客户端仅依赖抽象,符合开闭原则,便于扩展与维护。

工厂方法模式是一种创建型设计模式,它把对象的创建过程封装到子类中,让父类不依赖具体对象的类型。在C++中,通过虚函数定义创建对象的接口,由派生类决定实例化哪个类,从而实现对象创建的解耦。
工厂方法模式的核心思想
定义一个用于创建对象的接口,但让子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类。
关键点:
有一个抽象工厂基类,声明一个创建对象的虚函数每个具体工厂继承基类,实现自己的对象创建逻辑客户端代码只依赖抽象接口,不关心具体类型
基本实现结构
以生产不同类型的“产品”为例:
立即学习“C++免费学习笔记(深入)”;
#include #include// 产品抽象基类class Product {public:virtual ~Product() = default;virtual void use() const = 0;};
// 具体产品Aclass ConcreteProductA : public Product {public:void use() const override {std::cout << "使用产品 An";}};
// 具体产品Bclass ConcreteProductB : public Product {public:void use() const override {std::cout << "使用产品 Bn";}};
// 工厂基类 - 定义创建产品的接口class Factory {public:virtual ~Factory() = default;virtual std::unique_ptr createProduct() const = 0;};
// 具体工厂A - 创建产品Aclass ConcreteFactoryA : public Factory {public:std::unique_ptr createProduct() const override {return std::make_unique();}};
// 具体工厂B - 创建产品Bclass ConcreteFactoryB : public Factory {public:std::unique_ptr createProduct() const override {return std::make_unique();}};
使用示例
客户端通过工厂接口创建对象,无需知道具体类名:
int main() { // 可以根据配置或条件选择工厂 std::unique_ptr factory;// 假设条件判断使用哪种工厂bool useTypeA = true;if (useTypeA) { factory = std::make_unique();} else { factory = std::make_unique();}// 创建产品auto product = factory->createProduct();product->use(); // 输出:使用产品 Areturn 0;
}
优势与适用场景
工厂方法模式在C++中特别适合以下情况:
避免在代码中写死 new 操作:将对象创建集中管理扩展性好:新增产品类型时,只需添加新的工厂类,不修改已有代码符合开闭原则:对扩展开放,对修改关闭解耦客户端与具体类:客户端只依赖抽象接口
基本上就这些。工厂方法模式用虚函数把对象创建封装起来,让程序更灵活,也更容易维护。不复杂但容易忽略细节,比如记得把析构函数设为虚函数,避免资源泄漏。
以上就是C++工厂方法模式 对象创建接口封装的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1473016.html
微信扫一扫
支付宝扫一扫