フライウェイトパターンとは?
ふらいうぇいとぱたーん
大量の類似オブジェクトを扱う際に共有可能な状態を外部化してメモリ使用量を大幅に削減するデザインパターンです。
フライウェイトパターン(Flyweight Pattern)とは、GoFのデザインパターンの一つで、多数の細粒度オブジェクトを効率的に扱うために、オブジェクト間で共有できる内部状態(intrinsic state)をオブジェクト外部に切り出してキャッシュし、メモリ消費を最小化する構造的パターンです。「フライウェイト」はボクシングの最軽量級(フライ級)から来ており、「軽量」を意味します。
パターンの基本的な考え方は、オブジェクトの状態を2種類に分けることです。
- 内部状態(Intrinsic State):すべてのインスタンスで共有できる不変の情報(例:文字の字体・色・サイズ)
- 外部状態(Extrinsic State):各インスタンスに固有で、クライアントが外部から渡す情報(例:文字の画面上の座標)
共有する内部状態のオブジェクトはFlyweightファクトリが管理し、同じ内部状態を持つオブジェクトは再生成せずに使い回します。ゲームエンジンでの大量の木・煙・粒子エフェクトのレンダリング、テキストエディタでの文字オブジェクト管理、GUIライブラリでのアイコン共有などが代表的な使用例です。
このパターンを適用することで、数万〜数百万のオブジェクト相当の処理を少数の共有オブジェクトとデータの組み合わせで表現でき、メモリ使用量を数分の一から数十分の一に削減できる場合があります。
使い方・例文
テキストエディタで文書内の同じ文字(例:「あ」)が何千回登場しても、文字の描画情報は一つのフライウェイトオブジェクトとして共有し、座標情報だけを個別に保持することでメモリを大幅に節約できます。
この用語をシェア
最終更新: