iOS 类簇(class cluster)

概括

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

详解

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

下面看一个示例

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

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

参考链接

参考一
参考二
参考三

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 类簇实际上是Foundation framework框架下的一种设计模式,它管理了一组隐藏在公共接口下的私有类。 ...
    24c41111e47b阅读 9,394评论 1 28
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,142评论 0 62
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,212评论 30 472
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,267评论 0 2