PIYO - Tech & Life -

Objective-CでBuilderパターン

Builderパターンてのは、生成が面倒なオブジェクトの生成をいい感じにするデザインパターンです。Objective-Cではブロックを使っていい感じにできるみたいですね。

例えば特定日時のNSDateを生成するには次のようなコードを書くことになります。そこそこ煩雑です。

NSDateComponents *components = [NSDateComponents new];
components.year = 2014;
components.month = 4;
components.day = 15;
components.hour = 20;
components.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];

NSCalendar *cal = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
NSDate *date1 = [cal dateFromComponents:components];
NSLog(@"%@", [date1 debugDescription]);

こちらにあるようなカテゴリを定義しておいてBuilderブロックを使った初期化をできるようにしておくと簡単にかけます。確かに見通しがよくなるかも。

kluivers/jbw-builders

NSDate *date2 = [NSDate gregorianDateWithBuilderBlock:^(NSDateComponents *builder) {
	builder.year = 2014;
	builder.month = 4;
	builder.day = 15;
	builder.hour = 20;
	builder.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
}];
NSLog(@"%@", [date2 debugDescription]);

Rubyでもブロック内で初期化することありますよね。

Hoge.new do |hoge|
  hoge.value1 = "fuga"
  hoge.value2 = 10
end

みたいな。あー、具体例思いつかん。