Flyweight

flyweight.png

英語で「フライ級」を意味する単語です。 フライ級とは、ボクシングなどの体重階級の中でもっとも軽い部類に分類できる階級です。もっと軽い階級もありますが。 Flyweight パターンとは、インスタンスを共有することでリソースを無駄なく使うことに焦点を当てたパターンです[1]。

たとえば森を描画するとき。。。

メモリを無駄に沢山消費する悪い例 Flyweightパターンを使って改良した例
class Tree{
    private Mesh mMesh;
    /**樹皮 木の幹に使うテクスチャ*/
    private Texture mBark;
    /**葉っぱのテクスチャ*/
     private Texture mLeaves;
    Vector mPosition;
    double mHeight;
    double mThickness;
    Color mBarkTint;
    Color mLeafTint;
}
class TreeModel{
    private Mesh mMesh;
     /**樹皮 木の幹に使うテクスチャ*/
    private Texture mBark;
    /**葉っぱのテクスチャ*/
     private Texture mLeaves;
}
class Tree{
    private TreeModel mModel;
    Vector mPosition;
    double mHeight;
    double mThickness;
    Color mBarkTint;
    Color mLeafTint;  
}
こういうクラスを作ったとします。new Treeする度に、木の葉っぱや木の幹のテクスチャを割り当てます。
同じテクスチャを複数の木に使うのだとしたら、もったいないですね。同じ複数枚のテクスチャでVRAMが占領されてしまうのですから。
なので、なるべく共通する資源になるところは、メモリ割り当て回数が最小限に済むようにしたいものです。
TreeModelは一回だけメモリ割り当てするようにします。
あとは複数のTreeクラスで同じTreeModelを参照するようにします。
するとメモリを無駄に沢山使わなくて済みます
Bibliography
2. Game Programming Patterns (English Edition)….ゲームプログラミングでデザインパターンをどう取り入れるのかを、著者の経験を交えて実践的に書いてあります

game-design-pattern

サポートサイト Wikidot.com game-design-pattern