2008-05-07

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

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

ほとんどそのままの移植だが、ポイントは例ではJavaのjava.lang.Cloneableが使用されているが、Objective-CではFoundationに用意されているNSCopyingプロトコルを使用すること。

NSCopyingはオブジェクトのコピーするcopyメソッドを実現しているプロトコルだ。NSObjectでも宣言されているが、内容は空なのでここではあらためて抽象クラスであるProductクラスでも宣言しておく。このプロトコルを実装するにはcopyWithZoneを実装すればよい。ここでは子クラスに依るので、Productクラスでは内容は空。実際のProductクラスの実装クラスのMessageboxクラスでは以下のような実装となる。

-(id)copyWithZone:(NSZone*)zone
{
     id copyDestination = [[[self class] allocWithZone:zone] 
                                    initWithChar:decochar];
     return copyDestination;
}

今回のクラスはインスタンス変数もプリミティブなintの変数を一つ持っているだけなのでこの程度でOk。『Java言語で学ぶデザインパターン入門』では専用のcreateCloneというメソッドを定義しているが、ここでは素直にcopyを使うことにする。

オブジェクトのコピーやNSCopyingについては、Appleの『Memory Management Programming Guide for Cocoa』の"Implementing ObjectCopy"に詳しい解説がある。

0 件のコメント:

コメントを投稿