Re: [問題] FlyWeight Pattern

作者: yoco315 (眠月)   2012-02-03 01:35:22
※ 引述《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 差不多,缺有節省空間的優點,推薦使用。

Links booklink

Contact Us: admin [ a t ] ucptt.com