0
A
回答
1
這種模式被稱爲「工廠方法」。下面是它的論點,按照重要性遞減排序(在我看來,當VTK做出這些設計決策時我不在那裏)。
- 允許polymorhic行爲,從而跨平臺性。當你做
vtkRenderWindow* rw = vtkRenderWindow::New();
您實際上是創建一些派生的對象,例如在Linux/X11上的vtkXOpenGLRenderWindow或在Windows上的vtkWin32OpenGLRenderWindow。該工具包通過各種系統檢查(主要是在配置時)進行計算,併爲對象創建注入工廠,以返回正確類型的對象。整個機器對用戶來說是透明的,用戶只通過抽象基類指針來使用對象。
- 受保護的ctors禁止在堆棧上分配對象,這會強制執行內存管理模型(通過Un/Register(),即vtkObject中的引用計數)。
- 語法一致性允許與模板一起使用,例如vtkSmartPointer。
可能還有其他原因,我現在想不出來。
希望這有助於
米羅
相關問題
- 1. 創建對象的設計模式
- 2. 創建對象的設計模式
- 3. Java對象創建模式和設計
- 4. 在類中創建更多對象的面向對象的設計模式(c#)
- 5. 以不同方式從另一個對象創建對象的設計模式
- 6. 反覆創建對象的設計模式
- 7. 用於創建一組數據對象的設計模式
- 8. 從文件創建對象的設計模式?
- 9. 用於創建子類對象實例的設計模式
- 10. DDD對象創建設計
- 11. 對象和對象元模式設計
- 12. actionscript中的對象池設計模式
- 13. Flex中的值對象設計模式
- 14. Flyweight設計模式來創建共享對象池
- 15. java原型設計模式對象創建
- 16. 面向對象設計 - 創建策略/模式
- 17. 查詢對象模式(設計模式)
- 18. 對象創建鏈模式
- 19. 三ROME對象模型設計模式
- 20. 在java switch語句中創建新對象。可供選擇的設計模式?
- 21. 設計模式:多態的對象
- 22. 設計模式:連接的對象池
- 23. 過濾對象的設計模式
- 24. Python的對象池設計模式
- 25. 顯示DTO對象的設計模式
- 26. 動態C#對象的設計模式
- 27. 對象刪除的設計模式?
- 28. 創建API URL的設計模式
- 29. 哪種設計模式適合從模塊化子件創建對象?
- 30. 對JavaScript設計模式的建議
謝謝您的回答@mirni。關於第二點,我認爲防止堆棧分配並不是真正的優勢。 – iglesias
@iglesias在這種情況下,堆棧分配是不可取的。 VTK用於大型數據集的可視化,並且在堆棧上執行大型數組的分配將會很糟糕。這些庫的設計目的是構建通常比堆棧範圍壽命更長的管道,而數據集類則由多個類的多個實例組成 - 如果允許任何這些實例消失而沒有其所有者知道或做出響應,則這些實例將很難管理。 – Drone2537