我沒有看到任何區別。看起來兩個模式都在嘗試組合對象。任何人都可以解釋這兩種模式背後的意圖嗎?訪客和複合模式之間的區別?
回答
他們是不同的模式,但他們經常一起使用。
複合的要點是將相同的操作應用於共享接口的一組元素。訪問者的要點是用一個新的操作擴展一堆元素,而不改變它們的實現,也不用調用者的實現。因此,你經常會看到:
Composite c = new Composite();
Visitor v = new ConcreteVisitor();
c.visit(v);
這樣你就可以保持組合的實現,並且是在複合靜態類,只有改變你對他們適用的那種觀衆的。
這些模式是完全不同!首先複合是一個structural patterns,這意味着它被用來構建數據結構。 訪客爲behavioral pattern,負責關係和行爲。
若要進一步解釋它,請使用Composite來構建對象樹,其中所有項都是T
的子類型。然而,T
(容器的種類)的一個子類可以容納子集合T
。考慮一個類Item
比有兩個子類:Product
和Box
。 Box
可以進一步持有Item
的產品或箱子。這些嵌套的框可以保留更多的項目,所以我們正在有效地構建一個樹狀結構。
訪問者用於仿真虛擬呼叫以避免類似instanceof
的結構。完整的示例請參見Is This Use of the "instanceof" Operator Considered Bad Design?。 訪問者可以與複合一起使用 - 就像上面的示例中一樣,如果Item
定義了accept(ItemVisitor visitor)
方法,則可以遍歷樹。
我發現很難看到這兩者之間有任何相似之處。
複合是一個對象,它有一組操作和一個對象本身的容器。該容器可能包含或不包含對象。在Composite上執行的操作將在其本身及其包含的所有對象上執行。有些人可能把這稱爲一種樹。
訪問者是一組對象/操作,它們在已建立的類的層次結構上工作。 Visitor允許您在層次結構上創建操作,而無需更改層次結構。一個例子是創建一個操作(訪問)層次結構中的多個對象,從而將多個對象的工作組合在一起,而無需更改其接口。
這兩種模式確實完全不同。
- 1. 訪客和複合模式
- 2. 訪客設計模式和深度首次搜索之間的區別?
- 3. Vistor模式和狀態模式之間的區別?
- 4. 網絡模式和非網絡模式之間的區別
- 5. 火花獨立模式和本地模式之間的區別?
- 6. 代理模式和適配器模式之間的區別?
- 7. 本機模式和集成模式之間的區別
- 8. 怪癖模式和標準模式之間的區別JavaScript
- 9. 構造器模式和原型模式之間的區別
- 10. 服務結構之間的本地和訪客服務之間的區別
- 11. 合併和分支之間的區別
- 12. 集合和容器之間的區別
- 13. 保留和複製之間的區別?
- 14. 擴展和模塊之間的區別?
- 15. 模板include和jquery.load之間的區別?
- 16. MVVM - 模型和ViewModel之間的區別
- 17. 模塊和封閉之間的區別
- 18. 訪問者與組件模式之間的區別
- 19. 複合材料和cc之間的JSF2區別
- 20. 複合實體和歸屬關係之間的區別
- 21. OData複合體和實體類型之間的區別
- 22. C++:NVI和模板方法模式之間的區別?
- 23. 模塊模式中get/set和Object.defineProperty之間的區別
- 24. 模板方法(分離)和策略模式之間的區別?
- 25. rm和mp3格式之間的區別
- 26. 「。」之間的區別和 「$」 表達式
- 27. Spark Standalone:客戶端和集羣部署模式之間的區別
- 28. 模擬和verilog合成之間的區別始終阻止
- 29. 合金小工具和鈦模塊之間的區別..
- 30. 特權模式,內核模式和超級用戶模式之間的區別
你至少在搜索「訪客模式」和「複合模式」?兩者都導致維基百科的完整說明頁面。 –