今回は『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
を返すようにする。
コメント
コメントを投稿