Builder パターン試行 (7) ~多様性と汎用性~
2008/10/05 21:01 - デザインパターン
個別 Builder をバシバシ増やすことで、ほんのちょっとした違いのオブジェクトをバリエーション豊かに生成すること。 これが Builder パターンの肝。
ところで私が試行している、円形と方形が描画された表示オブジェクトの生成というプログラミングでは、同じ形状、同じ色の塗りであっても、サイズを変えたい場合は別途、個別 Builder を書かなければならない状況になっています。
でもそれって融通が利かないにもほどがあろうというもの。
やっぱこの程度のバリエーションなら、別の個別 Builder クラスを書くよりも、引数で対処した方が効率的じゃん、ということを切実に感じます。
てなワケで、前回の Director なしのパターンにもうちょっと汎用性を持たせてみよう、というのが今回のテーマです。
早速コーディングしたファイルの列挙
- Main.as (ドキュメントクラス)
- Builder.as (抽象ビルダクラス)
- 個別 Builder
- LineCircleBuilder.as (線のみの円形を描画)
- LineRectBuilder.as (線のみの方形を描画)
- FillCircleBuilder.as (塗りのみの円形を描画)
- FillRectBuilder.as (塗りのみの方形を描画)
- LineFillCircleBuilder.as (線と塗りの円形を描画)
- LineFillRectBuilder.as (線と塗りの方形を描画)
- SimpleDrawn.as (描画エンジンクラス 前々回からの同じもの)
前回とファイルの数は同じですが、個別 Builder クラスは getResult() メソッドだけになっています。
前回の個別 Builder クラスはその内部に、サイズや形状、線のプロパティ、塗りのプロパティといったものを定義するメソッドを override して保持していましたが、今回の改造では、その部分は、抽象 Builder クラスで一括して記述をおこなうこととなりました。
ドキュメントクラスは、個別 builder.getResult() メソッドで引数を取るようになったことだけが、前回との違いです。
「多様性」と「汎用性」。この相反する要求に対して、どこに妥協点を見いだすのかというのが問題なわけですが、こんなところが落とし所なんですかねぇ。