工廠模式(1)簡單工廠模式

設計模式系列文章


1、概念描述

簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。

2、場景舉例


馬戲團有dog和duck兩只動物,團長向馴獸師下指令,指定哪一只動物進行表演

3、代碼實現


各個類的說明:
  SIMAnimalProtocol:定義協議
  SIMAnimalFactory:工廠類(馴獸師)
  SIMAnimal:動物父類
  SIMAnimalDog:小狗
  SIMAnimalDuck:小鴨
  SIMViewController:控制器(團長)
SIMAnimalProtocol:
//具體代碼:
#import <Foundation/Foundation.h>

@protocol SIMAnimalProtocol <NSObject>

- (void)animalWalk; //動物走
- (void)animalBark; //動物叫

@end
SIMAnimal.h
#import <Foundation/Foundation.h>
#import "SIMAnimalProtocol.h"

@interface SIMAnimal : NSObject<SIMAnimalProtocol>

@property (strong, nonatomic) NSString *walkStr;
@property (strong, nonatomic) NSString *barkStr;

@end
SIMAnimal.m
#import "SIMAnimal.h"

@implementation SIMAnimal

- (void)animalWalk {
    self.walkStr = @"我們走";
}

- (void)animalBark {
    self.barkStr = @"叫一聲";
}

@end
SIMAnimalDog.h
#import <Foundation/Foundation.h>
#import "SIMAnimal.h"

@interface SIMAnimalDog : SIMAnimal

@end
SIMAnimalDog.m
#import "SIMAnimalDog.h"

@implementation SIMAnimalDog

- (void)animalWalk {
    [super animalWalk];
    NSLog(@"旺財,%@", self.walkStr);
}

- (void)animalBark {
    [super animalBark];
    NSLog(@"旺財,%@", self.barkStr);
}

@end
SIMAnimalDuck.h
#import <Foundation/Foundation.h>
#import "SIMAnimal.h"

@interface SIMAnimalDuck : SIMAnimal

@end
SIMAnimalDuck.m
#import "SIMAnimalDuck.h"

@implementation SIMAnimalDuck

- (void)animalWalk {
    [super animalWalk];
    NSLog(@"duck,%@", self.walkStr);
}

- (void)animalBark {
    [super animalBark];
    NSLog(@"duck,%@", self.barkStr);
}

@end
SIMAnimalFactory.h
#import <Foundation/Foundation.h>
#import "SIMAnimal.h"
#import "SIMAnimalDog.h"
#import "SIMAnimalDuck.h"

typedef NS_ENUM(NSUInteger, AnimalType) {
    AnimalType_dog,
    AnimalType_duck,
};

@interface SIMAnimalFactory : NSObject

+ (SIMAnimal *)assignAnimalWithType:(AnimalType)animalType;

@end
SIMAnimalFactory.m
#import "SIMAnimalFactory.h"

@implementation SIMAnimalFactory

+ (SIMAnimal *)assignAnimalWithType:(AnimalType)animalType {
    SIMAnimal *animal;
    switch (animalType) {
        case AnimalType_dog:
            animal = [[SIMAnimalDog alloc] init];
            break;
            
        case AnimalType_duck:
            animal = [[SIMAnimalDuck alloc] init];
            break;
            
        default:
            break;
    }
    return animal;
}

@end
SIMViewController.h
#import <UIKit/UIKit.h>

@interface SIMViewController : UIViewController

@end
SIMViewController.m
#import "SIMViewController.h"
#import "SIMAnimalFactory.h"

@interface SIMViewController ()

@end

@implementation SIMViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self dogShow];
    [self duckShow];
}

- (void)dogShow {
    SIMAnimal *animal = [SIMAnimalFactory assignAnimalWithType:AnimalType_dog];
    [animal animalBark];
    [animal animalWalk];
}

- (void)duckShow {
    SIMAnimal *animal = [SIMAnimalFactory assignAnimalWithType:AnimalType_duck];
    [animal animalBark];
    [animal animalWalk];
}

@end
打印結果:
簡單工廠模式.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容