vtk中的对象创建设计模式

时间:2017-04-19 12:28:30

标签: design-patterns vtk

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

为什么选择这种设计以及它的主要优势是什么?

1 个答案:

答案 0 :(得分:1)

此模式称为"工厂方法"。以下是它的论点,按重要性下降排序(在我看来,当VTK中的这些设计决策被制作时,我不在那里)。

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

vtkRenderWindow* rw = vtkRenderWindow::New();

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

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

现在我可能还有其他原因无法想到。

希望这有帮助,

米罗