vtk 中的对象创建设计模式



为什么从vtkObjectBase派生的vtk类具有受保护的构造函数,并且对象必须通过称为New的静态方法在堆中实例化?

为什么选择这种设计,它的主要优点是什么?

这种模式称为"工厂方法"。以下是它的论据,按重要性降序排序(在我看来;在 VTK 中做出这些设计决策时我不在那里)。

  • 允许多模行为,从而跨平台。当你这样做时

vtkRenderWindow* rw = vtkRenderWindow::New();

您实际上是在创建一些派生对象,例如 Linux/X11 上的 vtkXOpenGLRenderWindow 或 Windows 上的 vtkWin32OpenGLRenderWindow。该工具包通过各种系统检查(主要是在配置时)来解决这个问题,并为对象创建注入一个工厂,该工厂返回正确类型的对象。整个机器对用户是透明的,用户仅通过抽象基类指针使用对象。

  • 受保护的 ctor 禁止在堆栈上分配对象,这会强制执行内存管理模型(通过 Un/Register()-ing,即 vtkObject 中的引用计数)。
  • 语法一致性允许与模板一起使用,例如 vtkSmartPointer。

可能还有其他我现在想不出的原因。

希望这有帮助,

米罗

最新更新