您的位置:首页 > 移动开发 > IOS开发

工厂模式 iOS

2016-02-04 09:50 369 查看
简单 介绍一下工厂模式,是为了创建对象,也就是为了创建来自同一个父类的不同子类对象,动态的去创建对象。

下面举个例子:

一个动物类:

#import <Foundation/Foundation.h>

@interface Animal : NSObject

@property (nonatomic,strong) NSString *name;

-(void)eat;

@end

#import "Animal.h"

@implementation Animal

-(void)eat{
}
@end
他有两个子类分别为cat  和 pig

#import "Animal.h"

@interface Pig : Animal

@end

#import "Pig.h"

@implementation Pig

-(void)eat{

    NSLog(@"pig");

}

@end

#import "Animal.h"

@interface Cat : Animal

@end

#import "Cat.h"

@implementation Cat

-(void)eat{

    NSLog(@"cat");

}

@end

当我们需要动物对象时 又不知道具体是哪个动物对象就需要动态的创建对象,就需要一个工厂类通过我们传的参数帮我们动态创建对象。
工厂类:

#import <Foundation/Foundation.h>
@class Animal;

typedef enum {
    defuat = 1<<0,
    pig =  1<<1,
    cat = defuat
    
}AnimalKind;
@interface AnimalFactory : NSObject

-(Animal*)creatAnimal:(AnimalKind)kind;
-(Animal*)creatAnimal;

#import "AnimalFactory.h"

#import "Cat.h"
#import "Pig.h"

@implementation AnimalFactory

-(Animal*)creatAnimal:(AnimalKind)kind{
    
    switch (kind) {
        case pig:
            return [[Pig alloc] init];
            break;
            case cat:
            return [[Cat alloc] init];
        default:
            return [[Cat alloc] init];
            break;
    }
}

-(Animal*)creatAnimal{

    return [[Animal alloc]init];

}

@end
这样我们就可以动态的获取想要的动物对象,也可以在创建对象是在创建方法加上不同对象的不同初始化的操作,这里就不写了;

或者是当我们要创建很多很多对象,又要有需求将一个改成另一个对象,那样我们一个个改很麻烦,需要创建不同子类的工厂类,
例如:cat 工厂类

#import "AnimalFactory.h"

@interface CatFactory : AnimalFactory

-(Animal*)creatAnimal;
@end
#import "CatFactory.h"

#import "Cat.h"

@implementation CatFactory
-(Animal*)creatAnimal{
    return [[Cat alloc] init];
}
@end
pig 工厂类

#import "AnimalFactory.h"

@interface PigFactory : AnimalFactory

-(Animal*)creatAnimal;

@end
#import "PigFactory.h"

#import "Pig.h"

@implementation PigFactory

-(Animal*)creatAnimal{
    return [[Pig alloc] init];
    
}
@end
这样通过自己的工厂类创建对象,当需要改时只需要更换工厂类对象即可,如

AnimalFactory *catFactory=[[CatFactory alloc]init];

Animal *animal1=[catFactory createAnimal];
[animal1 eat];
Animal *animal2=[catFactory createAnimal];
[animal2
eat];
…….
Animal *animal100=[catFactory createAnimal];
[animal100 eat];
这样话如果要把100个Cat改为pig的话,只需要吧CatFactory改为PigFactory就可以;
这就是我对工厂模式使用的理解!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 工厂模式