如何详细解析通用动态抽象工厂的具体实现过程?

更新于
2026-10-10 11:36:49
0阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计3782个文字,预计阅读时间需要16分钟。

如何详细解析通用动态抽象工厂的具体实现过程?

目录+背景+实现+存储参数+存储对象+存储指针,可配置的单例+装饰工厂函数+责任链工厂+允许构造函数之外的参数组合+总结+背景+一开始,我想到了这个场景:

目录
  • 背景
  • 实现
  • 寄存参数
  • 存储所有构造出来的对象
  • 寄存指针,可析构的单例
  • 装饰工厂函数,责任链工厂
  • 允许构造函数之外的参数组合
  • 总结

背景

一开始,我是想到了下面这个场景:

struct A { void Foo() {} }; struct B { void Bar() { A().Foo(); } };

如上面代码,B的Bar中构造了A,然后调用了A的Foo函数。假如我想在别的场景中复用B的Bar,但是这时A的Foo就不符合需求了,需要定制,于是我们想到可以用多态,把A的Foo改成虚函数,然后写出A1:

struct A { A() = default; virtual ~A() = default; virtual void Foo() {} }; struct A1 : public A { void Foo() override {} };

B不应该知道A1的存在,为了让B用上A1,同时也为以后可能会拓展的A2、A3做准备,我们写了个A的工厂函数GetA()来生成A。

阅读全文

本文共计3782个文字,预计阅读时间需要16分钟。

如何详细解析通用动态抽象工厂的具体实现过程?

目录+背景+实现+存储参数+存储对象+存储指针,可配置的单例+装饰工厂函数+责任链工厂+允许构造函数之外的参数组合+总结+背景+一开始,我想到了这个场景:

目录
  • 背景
  • 实现
  • 寄存参数
  • 存储所有构造出来的对象
  • 寄存指针,可析构的单例
  • 装饰工厂函数,责任链工厂
  • 允许构造函数之外的参数组合
  • 总结

背景

一开始,我是想到了下面这个场景:

struct A { void Foo() {} }; struct B { void Bar() { A().Foo(); } };

如上面代码,B的Bar中构造了A,然后调用了A的Foo函数。假如我想在别的场景中复用B的Bar,但是这时A的Foo就不符合需求了,需要定制,于是我们想到可以用多态,把A的Foo改成虚函数,然后写出A1:

struct A { A() = default; virtual ~A() = default; virtual void Foo() {} }; struct A1 : public A { void Foo() override {} };

B不应该知道A1的存在,为了让B用上A1,同时也为以后可能会拓展的A2、A3做准备,我们写了个A的工厂函数GetA()来生成A。

阅读全文