iOS设计模式-工厂方法
2015-07-13 00:39
417 查看
工厂方法
工厂方法模式:定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。工厂方法的使用场景
编译时无法准确预期要创建的对象的类;类想让子类决定在运行时创建什么;
类有若干辅助类为其子类,而你想将返回哪个子类这一信息局部话;
工厂方法在CocoaTouch中的应用
在Objective-C中两步对象创建法[[SomeClass alloc] init].但是还有一些便利的创建方法。例如,NSNumber有很多numberWith*方法;其中有两个是numberWithBool:和numberWithChar:。它们是类方法,也就是说我们向NSNumber发送[[NSNumber numberWithBool:bool]]与[[NSNumber numberWithChar:char]],以获得与传入参数同类型的各种NSNumber实例。与如何创建NSNumber的具体子类型的实例有关的细节,都有NSNumber的类工厂方法负责。[[NSNumber numberWithBool:bool]]的情况是,方法接受值bool,并把NSNumber的内部子类的一个实例初始化,让它能够反应传入的值。工厂方法在Objective-C中的实现
1、定义通过工厂方法创建的类的统一父类(例如:Animal)和通过工厂方法创建的各个类(例如:Dog、Cat等),并为各个子类提供初始化细节。//通过工厂方法创建类的实现举例 - (id)initWithName:(NSString*)name{ if(self = [super init]){ self.name = name; //添加初始化相关细节 ... } return self; }
2、定义生成器父类(例如:AnimalGenerator)和各个生成器子类(例如:DogGenerator、CarGenerator)。
3、生成器父类中创建工厂方法、各个生成器子类中重载该方法
//AnimalGenerator中工厂方法 - (Animla*)animalWithName:(NSString*)name{ return [[Animal alloc] initWithName:name]; } //DogGenerator对AnimalGenerator中工厂方法的重载 - (Animal*)animalWithName:(NSString*)name{ return [[Dog alloc] initWitName:name]; }
4、使用
DogGenerator *dogGenerator = [[DogGenerator alloc] init]; //不同生成器创建不同的动物 Animal *dog = [[dogGenerator animalWithName:@"小七"]];
相关文章推荐
- iOS_小问题积累(duplicate symbo)
- loadView、viewDidLoad及viewDidUnload的关系
- IOS视频播放
- IOS开发之----Category的使用
- IOS中NSPredicate的用法
- iOS Provisioning Profile(Certificate)与Code Signing详解
- IOS游戏发布前的材料准备清单
- IOS嫁接支付宝方法
- Webservice 封装为 NSOperation 进行接口访问--IOS
- IOS开发- 02.数据懒加载
- 小码哥学习感想第一天
- iOS证书说明和发布内购流程整理
- 对比iOS中的四种数据存储
- iOS开发之——颜色设置
- AudioService.createStreamStates()
- iOS 9公测版来了 有什么变化?
- iOS 界面调试工具--Reveal
- iOS模拟器,点击textfield为什么不弹出软键盘
- iOS 9 适配系列教程
- 文章标题