C语言中如何实现一个通用的动态抽象工厂模式?

2026-04-12 07:130阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

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

C语言中如何实现一个通用的动态抽象工厂模式?

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

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

背景

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

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分钟。

C语言中如何实现一个通用的动态抽象工厂模式?

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

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

背景

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

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。

阅读全文