2008-05-09

Objective-Cの手習い:Builderパターン

今回は『Java言語で学ぶデザインパターン入門』からBuilderパターン。

クラス数が多くなってきたのでクラス図を示しておこう。

今回のパターンのクライアントであるメインメソッドで、Directorクラスを生成する。このDirectorクラスを使いながら、抽象クラスであるBuilderクラスを通してTextBuilderとHTMLBuilderを利用する。Javaのサンプルではコマンドラインからの引数でどちらのBuilderを使用するかを決定するようになっているが、今回は両方を生成し実行するようにしている。TextBuilderのほうか結果をコンソールに、HTMLBuilderのほうはGreeting.htmlというファイルに結果のHTMLを書き出すようになっている。

今回の実装もほとんどJavaのサンプルコードそのまま。ただし、getResultメソッドに関しては、Objective-CのProperty機能を使うことにした。

まず、抽象クラスであるBuilderクラスのヘッダーでの宣言を以下のようにする。

@property(readonly) NSString* result;

結果を戻すだけなので属性をreadonlyとし、結果はNSStringで戻すこととした。戻す内容はTextBuilderとHTMLBuilderで異なるのでBuilderクラスでのImplementation部での宣言は

@dynamic result;

として、実行時に子クラスでオーバーライドされることを明示する。

TextBuilderではresultに結果のテキストそのもの返すため、結果を格納するNSStringのオブジェクト_bufferを定義し、

    @synthesize result=_buffer;

としてプロパティresultと関連付ける。これだけでTextBufferにresultというメッセージを投げるとメソッドの定義なしで_bufferの内容を返してくれる。

HTMLBuilderでは結果については、

    [_buffer writeToFile:_filename atomically:YES 
            encoding:NSUTF8StringEncoding error:NULL];

としてファイルに書き出し、resultでは_filenameを返すようにする。

参照:Objecitve-C 2.0 Programming Language

0 件のコメント:

コメントを投稿