美文网首页
iOS 类簇(class cluster)

iOS 类簇(class cluster)

作者: c048e8b8e3d7 | 来源:发表于2016-10-14 16:04 被阅读48次

    概括

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

    详解

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

    下面看一个示例

    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 总结

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

    参考链接

    参考一
    参考二
    参考三

    相关文章

      网友评论

          本文标题:iOS 类簇(class cluster)

          本文链接:https://www.haomeiwen.com/subject/gdogyttx.html