我閱讀了有關享元設計模式,並瞭解它存儲可共享的對象以節省堆使用。 Java緩存還保存了以後可以重用的對象以節省內存。那麼Flyweight設計模式和java緩存之間的真正區別是什麼?享元設計模式和Java緩存之間的區別
3
A
回答
2
我們假設「Java緩存」是一個對象池(或對象池模式)。
我認爲不同之處在於對被緩存對象的理解是單例還是不單單。
在flyweight模式中,您可能會使用相同的由潛在多個客戶端從「工廠」獲取的對象。這需要不同的管理方式(如併發性,客戶端相關的工作等)。例如,如果您在同一時間可見的多個UI客戶端/視口中獲取相同的flyweight對象(讓我們說一個按鈕),那麼您最終將操縱可能會產生不一致的相同對象(例如按鈕文本)在這些不同的UI /視口上。這將不會發生,因爲每次請求對象時,池/緩存都會返回一個單獨的對象。
關於是不可變的,我在網上遇到了兩個例子,其中包括flyweight對象中的外部/改變狀態。好吧,我認爲將它作爲flyweight對象的一部分包含是完全錯誤的,因爲重點是減少內存佔用量,只要你可以正確管理對象。但我也認爲這是完全開放的討論。
4
Flyweight設計通常是不可變對象的存儲。
「Java緩存」不是一個明確定義的術語。這可能意味着很多事情,如結果緩存或資源對象池。
3
享元模式是一種結構設計模式 - 它會影響對象的結構設計。這種設計模式中的關鍵點是可共享和不可共享的狀態。可分享狀態存儲在Flyweight對象中(因爲它與上下文無關)。 也可能有外在狀態,這是不可共享的,並且指定該狀態落在客戶端上的負擔,因爲這是特定於上下文的。
現在你可以使用緩存來實現Flyweight模式,但是一般來說緩存與Flyweight模式沒有任何關係。高速緩存的思想具有更大的上下文,因爲它有利於通過重用來節省計算資源(CPU /內存/網絡)。
相關問題
- 1. 緩存方式和緩存集之間的區別
- 2. 會話和緩存之間的區別
- 3. GOF和GRASP設計模式之間的區別是什麼
- 4. 設計模式 - 適配器和橋之間的區別?
- 5. IIS 8.0中內核模式和用戶模式緩存之間的區別
- 6. 在Java中的OOP概念和設計模式之間的區別(更重要)
- 7. 設計模式和庫之間有什麼區別?
- 8. 天青共享緩存和新天青REDIS緩存之間有什麼區別?
- 9. jQuery緩存元素,$變量和變量之間的區別?
- 10. 引發緩存和空緩存之間有什麼區別?
- 11. 窗體和div元素之間的默認CSS設計區別
- 12. 編程範式,設計模式和應用架構之間的區別?
- 13. 「內存緩存」和「內存池」之間的區別
- 14. 緩存和共享有什麼區別?
- 15. AEM中當前樣式和當前設計之間的區別
- 16. OpenCL - 緩衝區和全局內存之間的區別
- 17. 時間共享和空間共享algotitms之間的區別
- 18. 桌子設計之間的區別?
- 19. 享元模式和對象池模式有什麼區別?
- 20. 設計模式:緩存和上下文
- 21. UML和設計模式(GoF)之間的關鍵區別是什麼?
- 22. 訪客設計模式和深度首次搜索之間的區別?
- 23. 存儲庫模式和視圖模型模式之間的區別
- 24. 緩存/池/緩存池之間的區別指南
- 25. Java和C#和.NET之間的區別
- 26. Vistor模式和狀態模式之間的區別?
- 27. 網絡模式和非網絡模式之間的區別
- 28. 火花獨立模式和本地模式之間的區別?
- 29. 代理模式和適配器模式之間的區別?
- 30. 本機模式和集成模式之間的區別
感謝您的回答Shailendra。你能否給我一個很好的例子,而不使用緩存? – 2015-02-24 04:25:26
看看http://stackoverflow.com/questions/14425671/what-is-the-difference-between-intrinsic-and-extrinsic-state-as-described-in-fly?rq=1 – Shailendra 2015-02-24 20:11:51