概括
类簇是一种设计模式(抽象工厂模式),它管理了一组隐藏在公共接口下的私有类。
详解
简单来说,我们调用的是父类抽象类,在抽象类里面会有诺干个私有子类,这些子类对于调用者来说是不公开的,然后会根据参数自动去实例化对应的子类。
下面看一个示例
NSMutableArray *array = [NSMutableArray new];
NSNumber *aInt = [NSNumber numberWithInt:1];
NSNumber *aBool = [NSNumber numberWithBool:YES];
NSString *aStr = @"xx";
在程序中设置一个断点,可以看到对应变量的类型,这几个变量的实际类型就是我们声明对象的私有子类
应用
在应用程序中,有时候需要做多条件的判断,更有可能在项目的后期会增加更多的判断,这个时候我们就可以考虑使用类簇
1 定义一个抽象类和两个子类
@interface ClusterTest : NSObject
@end
@interface ClusterTestNew : ClusterTest
@end
@interface ClusterTestOld : ClusterTest
@end
2 把逻辑判断放到抽象类里面
@implementation ClusterTest
+ (instancetype)alloc
{
if ([self class] == [ClusterTest class]) {
//为了避免重复调用
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
return [ClusterTestNew alloc];
} else {
return [ClusterTestOld alloc];
}
}
return [super alloc];
}
@end
@implementation ClusterTestNew
@end
@implementation ClusterTestOld
@end
3 使用
ClusterTest *test = [[ClusterTest alloc] init];
这样如果系统版本是10及以上
,则test
是ClusterTestNew
,否则为ClusterTestOld
对象
4 总结
这样有个好处就是在调用的地方显得很简洁,就算以后增加了判断条件,也不会有任何的影响