プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

20.Flyweight 同じ物を共有して無駄をなくす

メモリ消費を減らす。
インスタンスをできるだけ共有して無駄にnewしない。

f:id:p-monster:20121218195900p:plain

Flyweight・・・共有するクラス(メモリ食う)
FlyweightFactory・・・工場。内部にインスタンスをコンテナに格納。
Client・・・FlyweightFactoryを使ってFlyweightを作り出し、それを利用する。

共有を変更すると複数箇所に影響が出る。
intrinsic(イントリンシック)な情報。intrinsicは本来備わっている、本質的なという意味。場所や状況に依存しない、共有できる情報。
extrinsic(エクストリンシック)な情報。外からやってきた、非本質的なという意味。場所や状況に依存するので共有できない情報。
共有できる情報とできない情報を区別することが重要。

関連しているパターン

Proxy・・・Flyweightパターンではインスタンスの生成に時間がかかる場合、インスタンスの共有によって処理スピードがあがる。Proxyパターンでは代理人を立てることによって処理スピードがあがる。
Composite・・・FlyweightパターンでLeaf役を共有させることが出来る場合がある。
Singleton・・・FlyweightFactoryはSingletonになる場合がある。また、Singletonはintrinsicな情報しか持っていない。

参考:

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門