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.

Revisions

  1. Prof. Bryant E Adams revised this gist Apr 3, 2013. 1 changed file with 17 additions and 0 deletions.
    17 changes: 17 additions & 0 deletions Page115Listing1.m
    Original file line number Diff line number Diff line change
    @@ -15,3 +15,20 @@ -(Pizza*) createPizza(NSString* type)
    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

  2. Prof. Bryant E Adams revised this gist Apr 3, 2013. 1 changed file with 4 additions and 3 deletions.
    7 changes: 4 additions & 3 deletions Page116Listing1.m
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,8 @@
    @interface PizzaStore : NSObject
    @property (strong, readwrite) SimplePizzaFactory* factory;
    @end

    @implementation PizzaStore
    {
    SimplePizzaFactory* factory;
    }
    -(id)initWithFactory:(SimplePizzaFactory* factory)
    {
    self = [super init];
  3. Prof. Bryant E Adams created this gist Apr 3, 2013.
    1 change: 1 addition & 0 deletions Page110Listing1.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1 @@
    Duck* duck = [[MallardDuck alloc] init];
    9 changes: 9 additions & 0 deletions Page110Listing2.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,9 @@
    Duck* duck;

    if(picnic) {
    duck = [[MallardDuck alloc] init];
    } else if(hunting) {
    duck = [[DecoyDuck alloc] init];
    } else if(inBathTub) {
    duck = [[RubberDuck alloc] init];
    }
    10 changes: 10 additions & 0 deletions Page112Listing1.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,10 @@
    -(Pizza*) orderPizza
    {
    Pizza* pizza = [[Pizza alloc] init];

    [pizza prepare];
    [pizza bake];
    [pizza cut];
    [pizza box];
    return pizza;
    }
    18 changes: 18 additions & 0 deletions Page112Listing2.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,18 @@
    -(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;
    }
    22 changes: 22 additions & 0 deletions Page113Listing1.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,22 @@
    -(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;
    }
    17 changes: 17 additions & 0 deletions Page115Listing1.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,17 @@
    @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
    30 changes: 30 additions & 0 deletions Page116Listing1.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,30 @@
    @implementation PizzaStore
    {
    SimplePizzaFactory* factory;
    }
    -(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