Re: [問題] FlyWeight Pattern
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
OOAD 近期熱門文章
PTT數位生活區 即時熱門文章