【Objective-C デザインパターン】Prototypeパターン
Javaではよくデザインパターンの例文があるけど、そういえばObjective-Cではあんまりないなと。これを機会に本買って、Objective-Cのデザインパターンを勉強してみる。
Pro Objective-C Design Patterns for iOS
- 作者: Carlo Chung
- 出版社/メーカー: Apress
- 発売日: 2011/04/01
- メディア: Kindle版
- この商品を含むブログを見る
早速、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パターンと併用するケースが有効みたい。またの機会に試したいですね。