Abstract Factoryパターンの目的はロジックとロジックを選択するスイッチ文を分離すること。
一つの変数を複数のスイッチ文で使用していたら(switch句のすぐ後に来ていたら)Abstract Factoryを使うべき。
例えば、以下のようなコード。
public sub GetCodeNo() switch _regionCode case USA _codeNo = 1 case JAPAN _codeNo = 2 end end public sub IsPlayable switch _regionCode case USA _playable = true case JAPAN _playable = false end end
↑のコードでは_regionCodeが複数のswitch文で使用されている。
switch文はstrategyパターンで取り除くのが基本だが、switch文が複数あり、使用される実装の組み合わせが決まっている場合(例えば、ユーザのregionがUSAなら_codeNoは1だし、_playableはtrueになるといったように。)はその組み合わせをAbstract Factoryクラスで定義することで複雑さを低減することができる。
Abstract Factoryを適用する前に考えるべきことは
1どんなパターンがあるか
2どんなロジックがあるか
3生成ロジックをどこにかくか
Abstract Factoryパターンの目的をまとめると
・実装とその選択を分離できる
・実装のセットをファクトリークラスとして定義できる