【Objective-C デザインパターン】Prototypeパターン

Javaではよくデザインパターンの例文があるけど、そういえばObjective-Cではあんまりないなと。これを機会に本買って、Objective-Cデザインパターンを勉強してみる。

 

Pro Objective-C Design Patterns for iOS

Pro Objective-C Design Patterns for iOS

 

早速、Prototypeパターンについて振り返り。

[Prototypeパターンとは]

すでに存在するオブジェクトを複製することにより、新しいオブジェクトを生成する。

 

[利用するケース]

クラスからのインスタンス化が難しい場合。

newによる初期化にかなりの負荷がある場合。

 

[具体的には]

NSCopyingプロトコルのcopyWithZoneを実装することにより実現できる。

NSObjectクラスはcopyメソッドを持っているが、NSObjectプロトコルは持っていない。ただし、デフォルトではcopyメソッドは空なので、NSCopyingプロトコルをサポートしてcopyWithZoneを実装しなければいけない。

 

シャロウコピー、ディープコピーどちらにするかはケースバイケース。


ここでは、Productオブジェクトをプロトタイプとして作成。あとは、Productオブジェクトを量産したいときにcopyWithZoneを叩くのみ。

//
// Product.h
//
#import <Foundation/Foundation.h>

@interface Product : NSObject <NSCopying>
{
NSString *productName;
float price;
id delegate;
}
@end

//
// Product.m
//
#import "Product.h"

@implementation Product
- (id)copyWithZone:(NSZone *)zone

{

Product *copy = [[[self class] allocWithZone: zone]

initWithProductName:[self productName]

price:[self price]];

[copy setDelegate:[self delegate]];



return copy;

}

@end


特に、動的に生成が難しいCompositeパターンと併用するケースが有効みたい。またの機会に試したいですね。