C语言中如何实现一个通用的动态抽象工厂模式?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3778个文字,预计阅读时间需要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。
本文共计3778个文字,预计阅读时间需要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。

