为什么从vtkObjectBase
派生的vtk类具有受保护的构造函数,并且必须通过名为New
的静态方法在堆中实例化对象?
为什么选择这种设计以及它的主要优势是什么?
答案 0 :(得分:1)
此模式称为"工厂方法"。以下是它的论点,按重要性下降排序(在我看来,当VTK中的这些设计决策被制作时,我不在那里)。
vtkRenderWindow* rw = vtkRenderWindow::New();
您实际上正在创建一些派生对象,例如Linux / X11上的vtkXOpenGLRenderWindow或Windows上的vtkWin32OpenGLRenderWindow。该工具包通过各种系统检查(主要在配置时)进行计算,并为对象创建注入工厂,返回正确类型的对象。整个机器对用户是透明的,用户只通过抽象基类指针使用对象。
现在我可能还有其他原因无法想到。
希望这有帮助,
米罗