类簇(class cluster),是一种基于抽象工厂的设计模式,广泛运用于系统的Foundation框架。顾名思义,即一坨类,这里指的是继承自同一父类的一组私有子类。这种实现既可以简化公共接口,又保证了功能的丰富性。
1、不使用类簇:概念简单,但是接口复杂
为了阐述类簇实现以及它的好处,思考一个问题:如何构建一个类体系来存储不同类型(char, int, float, double等等)的number?
这些不同类型的number有着很多相同的特性(例如转成另一种类型的number,表示成字符串等等),又各自有着不同的存储。鉴于此,可以使用如下实现:
Number是抽象父类,实现子类的公共接口。但是它并没有定义实例变量来存储number,交由子类各自定义。
随着number类型的改动和增多,类体系会演化成下面这样,子类特别多:
2、使用类簇:概念简单,接口也简单
使用者只能看到父类Number,它的子类都变成私有的,由父类负责创建子类对象。
NSNumber *aChar = [NSNumber numberWithChar:’a’];
NSNumber *anInt = [NSNumber numberWithInt:1];
NSNumber *aFloat = [NSNumber numberWithFloat:1.0];
NSNumber *aDouble = [NSNumber numberWithDouble:1.0];
3、包含多个父类的类簇
参考链接:
https://developer.apple.com/documentation/foundation/nsmutablearray?language=objc