iOS 类簇(class cluster)

2016-10-14  本文已影响48人  c048e8b8e3d7

概括

类簇是一种设计模式(抽象工厂模式),它管理了一组隐藏在公共接口下的私有类。

详解

简单来说,我们调用的是父类抽象类,在抽象类里面会有诺干个私有子类,这些子类对于调用者来说是不公开的,然后会根据参数自动去实例化对应的子类。

下面看一个示例

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及以上,则testClusterTestNew,否则为ClusterTestOld对象

4 总结

这样有个好处就是在调用的地方显得很简洁,就算以后增加了判断条件,也不会有任何的影响

参考链接

参考一
参考二
参考三

上一篇下一篇

猜你喜欢

热点阅读