Builder パターン試行 (4) ~基本に忠実(3)~
2008/09/25 21:40 - デザインパターン
Builder パターンの基本に忠実なコーディングをおこなうと、以下の六個のクラスを使うことになる話の最終回。
- Main.as (ドキュメントクラス)
- Director.as (ディレクタクラス)
- Builder.as (抽象ビルダクラス)
- CircleBuilder.as (円形を描画する個別ビルダクラス)
- RectBuilder.as (方形を描画する個別ビルダクラス)
- SimpleDrawn.as (描画エンジンクラス)
今回は Director とドキュメントクラスについて。
Director
その構造は至極簡単で、コンストラクタで Builder を保持し、constract メソッドでその Builder への作業開始命令をおこないます。
package { public class Director { private var builder:Builder; public function Director(builder:Builder) { this.builder = builder; } public function constract():void { builder.setType(); builder.setSize(); builder.setFillProp(); builder.setLineProp(); builder.draw(); } } }
以上がその全文です。実に短い。
解説書類には、Builder が個別の職人なら Director は現場監督であり、現場監督なのでシングルトン的な立場をとるため、どの職人(Builder)に対しても同一のコードで対応できるようにコーディングするようにせよ、などとも書いてあったりもします。
よってコンストラクタの引数は、個別のビルダではなく抽象ビルダになるわけですね。
ドキュメントクラス
ディレクタと個別ビルダにのみ注目した処理の流れは以下のようになります
- 個別のビルダを生成
- その個別ビルダを引数としてディレクタを生成
- ディレクタの constract メソッドを実行
- 個別ビルダの getResult メソッドを実行して、成果物を取得
上記流れのコード模式図は以下のようになります。
var 個別ビルダ:CircleBuilder = new CircleBuilder(); var ディレクタ:Director = new Director(個別ビルダ); ディレクタ.constract(); var 成果物:Shape = 個別ビルダ.getResult();
これが基本に忠実に Director で Builder を管理する Builder パターンのコードになります。
ところで Director クラスの constract メソッドの綴りが間違えていますが(正しくは construct)、細かいことは気にしない!
なんてったって現場監督クンにはリストラの対象になってもらうからね~。チミは馘だ!
……というのが 次回の話。