今回は『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"に詳しい解説がある。
コメント
コメントを投稿