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パターンの目的をまとめると
・実装とその選択を分離できる
・実装のセットをファクトリークラスとして定義できる