vtk中的对象创建设计模式

Object creation design pattern in vtk

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

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

这种模式叫做"factory method"。以下是它的论据,按重要性降序排列(在我看来;在 VTK 中做出这些设计决策时我不在场)。

  • 允许多态行为,从而实现跨平台。当你做

vtkRenderWindow* rw = vtkRenderWindow::New();

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

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

可能还有其他我暂时想不起来的原因。

希望这对您有所帮助,

米罗