Re: [問題] FlyWeight Pattern

看板OOAD作者 (眠月)時間12年前 (2012/02/03 01:35), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《QQ29 (我愛阿蓉)》之銘言: : 有沒有更好的例子來說明這個pattern的用途 boost::flyweight 的文件裡面的例子就不錯囉。 假設你寫一個線上遊戲,裡面有很多玩家, 玩家輸入的名字有 first name 跟 last name。 class Player { std::string first_name; std::string last_name; }; 但是,你知道很多人都叫做 "Jack" "Smith",叫 "Jack" 的搞不好有好幾百人, 你每個都存一份,那就很累,很浪費空間,所以你要想個辦法解決這個問題, 所以我們就可以使用 flyweight,也就是我們只保存某種形式的指標,指向實體, 至於實體就放在別處,統一蒐集起來,大家共用。記憶體就可以只用原來的幾 %。 Pattern 只是 pattern,實作方法很多, 當然用指標或是 reference 也是一種實作方法。 class Player { std::string* first_name; std::string* last_name; } 但是這種實作當然有缺點, 就是操作起來跟原來的 string 比起來麻煩很多。 boost::flyweight 的設計不錯,為 flyweight 提供了 value 語意。 使用起來跟原來 string 差不多,缺有節省空間的優點,推薦使用。 -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 182.235.170.158
文章代碼(AID): #1FAibSLb (OOAD)
討論串 (同標題文章)
文章代碼(AID): #1FAibSLb (OOAD)