Flyweightパターン:オブジェクトを共有するデザインパターンをクラス図にまとめる

デザインパターン

Flyweightパターン

Flyweightパターンは、オブジェクトを共有し、必要以上のオブジェクトを作成しないようにするデザインパターンです。
自分なりにFlyweightパターンをクラス図にまとめてみました。

Flyweightパターンのクラス図

Flyweightパターンのクラス図

Flyweightパターンのクラス図

Flyweightパターンの解説

Flyweightパターンは、あるクラス(図ではFlyweight)のオブジェクトをプログラム内で複数回使用する場合に、毎回インスタンス生成せずに同じオブジェクトを使えば良い場合に、すでに作成したオブジェクトがあればそれを使い回すパターンです。

なので、プログラム内でFlyweightオブジェクトを使いたい場合は、そのオブジェクトを保持しているクラス(図ではFlyweightFactory)のgetFlyweightメソッドを呼び出し、使いたいFlyweightオブジェクトを取得します。

共有したいFlyweightオブジェクトが複数ある場合を想定し、pool変数はFlyweight型の配列にします。もし、オブジェクトが生成されていない場合(初回の呼び出し)は、getFlyweightメソッド内でFlyweightをインスタンス化し、pool配列に格納します。

Flyweightパターンをどういう場合に使うか

上記の例のように、プログラム内で複数の場所で同じオブジェクトを使用したい場合に、都度オブジェクトを作成するのではなく、共有オブジェクトを使用したい場合などに使用します。
例えば、処理上のベースとなる値をまとめたオブジェクトなど。

PlantUMLでFlyweightパターンのクラス図を記述する

Flyweightパターンのクラス図をPlantUMLで書いたときのソースです。

@startuml Flyweight
abstract class Flyweight{
}
class FlyweightFactory{
  - pool: Flyweight[]
  --
  + getFlyweight() : Flyweight
}
FlyweightFactory o-- Flyweight
@enduml

参考サイトURL

Flyweight パターン – Wikipedia