設(shè)計(jì)模式系列文章
1微驶、概念描述
簡單工廠模式是由一個(gè)工廠對(duì)象決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例腮鞍。
2、場(chǎng)景舉例
馬戲團(tuán)有dog和duck兩只動(dòng)物道盏,團(tuán)長向馴獸師下指令而柑,指定哪一只動(dòng)物進(jìn)行表演
3文捶、代碼實(shí)現(xiàn)
各個(gè)類的說明:
SIMAnimalProtocol:定義協(xié)議
SIMAnimalFactory:工廠類(馴獸師)
SIMAnimal:動(dòng)物父類
SIMAnimalDog:小狗
SIMAnimalDuck:小鴨
SIMViewController:控制器(團(tuán)長)
SIMAnimalProtocol:
//具體代碼:
#import <Foundation/Foundation.h>
@protocol SIMAnimalProtocol <NSObject>
- (void)animalWalk; //動(dòng)物走
- (void)animalBark; //動(dòng)物叫
@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(@"旺財(cái),%@", self.walkStr);
}
- (void)animalBark {
[super animalBark];
NSLog(@"旺財(cái)媒咳,%@", 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
打印結(jié)果:
簡單工廠模式.png