Builder パターン試行 (8) ~さらに汎用化~
2008/10/06 20:45 - デザインパターン
前回は「多様性」と「汎用性」を天秤にかけてみて、個別 Builder に引数を導入することで汎用性側に傾いてみましたが、今回はさらに汎用性に傾いたコーディングをしてみます。
早速コーディングしたファイルの列挙
- Main.as (ドキュメントクラス)
- Builder.as (ビルダクラス)
- SimpleDrawn.as (描画エンジンクラス ずっと同じもの)
汎用化を進めてみたら個別 Builder が消滅しちゃいました。 まぁ当然といえば当然の帰結と言えましょうか。
前回、個別 Builder クラスの getResult() メソッドでは不定長の引数を取り、個別 Builder の各々の性質により、プロパティを設定する set○○メソッドを必要な分だけ呼び出すというコーディングをしました。
例えば、塗りだけの場合は setLineProp()メソッドを呼ばない、線だけの場合は setFillProp を呼び出さない、円形の場合は setType(CIRCLE) 、方形の場合は setType(Rect)である、など。
今回の getResult() メソッドは、引数に形状、サイズ、塗りのプロパティ、線のプロパティのすべてを記述し、線だけだろうと塗りだけだろうと両方だろうと、set○○メソッドをすべて呼び出すようにしました(if 文で実行の有無を分岐します)。 そのため不定長から固定長になりました。
結果、抽象 Builder のメソッドは、定義だけで処理が存在しない抽象メソッドが消滅し、すべてのメソッドに処理が記述されることとなりました。 んでもって個別 Builder はお役ご免というカラクリ。
多様性のためのパターンである Builder パターンであるにも関わらず、ここまで汎用化させるのはやり過ぎですねー。 でもまぁテストの一環と言うことでエントリーしておきます。