这里介绍一下设计模式中的简单工厂模式、工厂方法模式、抽象工厂模式在iOS中的实现。这三个设计模式是有演变关系的;在开发中可以根据情况选择。
一、简单工厂模式
- 怎么引出的?
假设目前的情况是:我们在一个类中有一个方法生产面包,另一个方法生产蛋糕,这两个方法的业务逻辑是不一样的;我们在使用本类中使用时就可以分别调用这两个方法来完成业务,但是如果我们要在别的类中也能够实现这两个功能时,我们需要将方法抽取到不同的类中去实现。
// 这里只列举生产蛋糕的方法抽取到一个类
// 抽取的父类
@interface Operation : NSObject
- (void)productFood;
@end
@implementation Operation
- (void)productFood{}
@end
// 生产蛋糕的类
@interface OperationCake : Operation
@end
@implementation OperationCake
- (void)productFood{
// do some things 执行业务逻辑
NSLog(@"蛋糕生产成功!");
}
@end
简单工厂模式做法就是由一个工厂类(Factory)来提供方法来创建实际的生产线对象,我们在使用时面向这个工厂类就可以了,创建出来的对象调用生产方法就可以执行对应的逻辑生产出蛋糕。
// 工厂类
@implementation Factory
// 创建一条生产线
+ (Operation *)createOperation:(OperationType)type{
switch (type) {
case OperationTypeCake:
return [[OperationCake alloc] init];
break;
case OperationTypeBread:
return [[OperationBread alloc] init];
break;
default:
break;
}
}
@end
使用方法:
Operation *cakeMaker = [Factory createOperation:OperationTypeCake];
[cakeMaker productFood];
二、工厂方法模式
由简单工厂演变而来的,因为在简单工厂使用时,生产线很多的情况下,不方便拓展,尤其是某些生产线可以归为同一种类时。
工厂方法模式的做法是:将上面的创建流水线的的业务改为由对应的工厂类来实现,这样我们使用时,直接使用对应的工厂来创建属于它的流水线。
// 工厂类
@interface Factory : NSObject
// 创建一条生产线
+ (Operation *)createOperation;
@end
// 蛋糕工厂类
@interface FactoryCake : Factory
@end
@implementation FactoryCake
+ (Operation *)createOperation{
return [[OperationCake alloc] init];
}
@end
使用时
Operation *cakeMaker2 = [FactoryCake createOperation];
[cakeMaker2 productFood];
三、抽象工厂模式
在工厂方法模式中,如果我们使用时每次需要知道工厂类,就会很麻烦,所以进而会在工厂类中增加一个创建对应工厂的方法。
// 创建对应的工厂
+ (Factory *)createFactory:(FactoryType)type{
switch (type) {
case FactoryTypeCake:
return [[FactoryCake alloc] init];
break;
case FactoryTypeBread:
return [[FactoryBread alloc] init];
break;
default:
break;
}
}
使用时:
Factory *fac = [Factory createFactory:FactoryTypeCake];
Operation *cakeMaker3 = [fac createOperation];
[cakeMaker3 productFood];
在iOS中可以NSNumber就是抽象工厂方法设计模式。
【iOS类簇】工厂设计模式(Class Cluster)
网友评论