Skip to content

Instantly share code, notes, and snippets.

@b-adams
Last active December 15, 2015 18:39
Show Gist options
  • Save b-adams/5305279 to your computer and use it in GitHub Desktop.
Save b-adams/5305279 to your computer and use it in GitHub Desktop.
Sample Java -> Objective-C translation for CS132 pages 109-118
Duck* duck = [[MallardDuck alloc] init];
Duck* duck;
if(picnic) {
duck = [[MallardDuck alloc] init];
} else if(hunting) {
duck = [[DecoyDuck alloc] init];
} else if(inBathTub) {
duck = [[RubberDuck alloc] init];
}
-(Pizza*) orderPizza
{
Pizza* pizza = [[Pizza alloc] init];
[pizza prepare];
[pizza bake];
[pizza cut];
[pizza box];
return pizza;
}
-(Pizza*) orderPizza:(NSString* type)
{
Pizza* pizza = [[Pizza alloc] init];
if([type isEqualToString:@"cheese"]) {
pizza = [[CheesePizza alloc] init];
} else if([type isEqualToString:@"greek"]) {
pizza = [[GreekPizza alloc] init];
} else if([type isEqualToString:@"pepperoni"]) {
pizza = [[PepperoniPizza alloc] init];
}
[pizza prepare];
[pizza bake];
[pizza cut];
[pizza box];
return pizza;
}
-(Pizza*) orderPizza:(NSString* type)
{
Pizza* pizza;
if([type isEqualToString:@"cheese"]) {
pizza = [[CheesePizza alloc] init];
// } else if([type isEqualToString:@"greek"]) {
// pizza = [[GreekPizza alloc] init];
} else if([type isEqualToString:@"pepperoni"]) {
pizza = [[PepperoniPizza alloc] init];
} else if([type isEqualToString:@"clam"]) {
pizza = [[ClamPizza alloc] init];
} else if([type isEqualToString:@"veggie"]) {
pizza = [[VeggiePizza alloc] init];
}
[pizza prepare];
[pizza bake];
[pizza cut];
[pizza box];
return pizza;
}
@implementation SimplePizzaFactory
-(Pizza*) createPizza(NSString* type)
{
Pizza* pizza = nil;
if([type isEqualToString:@"cheese"]) {
pizza = [[CheesePizza alloc] init];
} else if([type isEqualToString:@"pepperoni"]) {
pizza = [[PepperoniPizza alloc] init];
} else if([type isEqualToString:@"clam"]) {
pizza = [[ClamPizza alloc] init];
} else if([type isEqualToString:@"veggie"]) {
pizza = [[VeggiePizza alloc] init];
}
return pizza;
}
@end
//More idiomatic Objective-C
@implementation SimplePizzaFactory
-(Pizza*) createPizza(NSString* type)
{
NSDictionary* pizzaTypes = @{ @"cheese": [CheesePizza class],
@"pepperoni": [PepperoniPizza class],
@"clam": [ClamPizza class],
@"veggie": [VeggiePizza class] };
Class pizzaClass = [pizzaTypes objectForKey:type];
Pizza* pizza = [[pizzaClass alloc] init];
return pizza;
}
@end
@interface PizzaStore : NSObject
@property (strong, readwrite) SimplePizzaFactory* factory;
@end
@implementation PizzaStore
-(id)initWithFactory:(SimplePizzaFactory* factory)
{
self = [super init];
if(self)
{
[self setFactory:factory];
}
return self;
}
-(Pizza*) orderPizza:(NSString* type)
{
Pizza* pizza;
pizza = [factory createPizza:type];
[pizza prepare];
[pizza bake];
[pizza cut];
[pizza box];
return pizza;
}
// other methods here
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment