Monthly Archives: February 2011

Strategy pattern을 Objective-C 로 만들어봤습니다.

Head First Design Patterns : 스토리가 있는 패턴 학습법을 읽고, 한번 만들어 봤습니다. 다음 글을 보고, 책에 있는 자바로 만들어진 오리로 만들어 봤습니다. 책을 더 참고하시면 더 확장하실 수 있습니다. 참고로 저는 아직까지 50, 52, 64 번째 줄이 정확히 이해가 안 됩니다. ^^;
How to create a strategy pattern in Objective-C?

[code lang=”objc”]
//
// main.m
// testing
//
// Created by Jaehwan on 11. 2. 9..
// Copyright 2011 Wireless Air. All rights reserved.
//

#import

@protocol FlyBehavior

@required
– (void) fly;

@end

@interface FlyWithWings : NSObject
{
// ivars for A
}
@end

@implementation FlyWithWings

– (void) fly
{
NSLog(@"Fly With Wings!");
}

@end

@interface FlyNoWay : NSObject
{
// ivars for A
}
@end

@implementation FlyNoWay

– (void) fly
{
NSLog(@"Fly No Way!");
}

@end

@interface Duck : NSObject
{
id flyBehavior;
}
@property (assign) id flyBehavior;

– (void) fly;

@end

@implementation Duck

@synthesize flyBehavior;

– (void) fly
{
[flyBehavior fly];
}

@end

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// insert code here…
NSLog(@"Hello, World!");

FlyWithWings * flyWithWings = [[[FlyWithWings alloc] init] autorelease];
FlyNoWay * flyNoWay = [[[FlyNoWay alloc] init] autorelease];
Duck * context = [[[Duck alloc] init] autorelease];

[context setFlyBehavior:flyWithWings];
[context fly];
[context setFlyBehavior:flyNoWay];
[context fly];

[pool drain];
return 0;
}
[/code]