工厂模式 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就可以;
这就是我对工厂模式使用的理解!!!
下面举个例子:
一个动物类:
#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就可以;
这就是我对工厂模式使用的理解!!!
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 介绍php设计模式中的工厂模式
- asp.net 简单工厂模式和工厂方法模式之论述
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- js简单工厂模式用法实例
- javascript 模式设计之工厂模式详细说明
- 实例解析Java单例模式编程中对抽象工厂模式的运用
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- python中getattr函数使用方法 getattr实现工厂模式
- 检测iOS设备是否越狱的方法
- 工厂模式在Zend Framework中应用介绍