類簇的定義
類簇(Class Cluster)是定義相同的接口并提供相同功能的一組類的集合,僅公開接口的抽象類也可以稱之為類簇的公共類,每個具體類的接口有公共類的接口抽象化,并隱藏在簇的內(nèi)部。
是基于抽象工廠模式在OC中應(yīng)用。
類簇的目的
更加方便的初始化出一個類的實例對象。
iOS中應(yīng)用了類簇設(shè)計的類
NSNumber,NSArray,NSDictionary,NSSet,NSTextStorage,(其他的暫時不知道)
對NSNumber實現(xiàn)的猜測
NSNumber是解決基本數(shù)據(jù)類型,結(jié)構(gòu)體轉(zhuǎn)化對象的一種解決方案。對于這個轉(zhuǎn)化而言,如果每一個數(shù)據(jù)類型都對應(yīng)一個轉(zhuǎn)化后的類對象,會造成轉(zhuǎn)化的類過多,使用不便的問題。對于NSNumber的使用,關(guān)注的是他的使用結(jié)果,而非過程。因此,可將每一個基本數(shù)據(jù)類型,結(jié)構(gòu)體轉(zhuǎn)化后的類都放在一個文件中,使其均繼承一個公共的父類。由父類暴露出功能接口,在對應(yīng)的實現(xiàn)中,通過每一個具體的子類進(jìn)行實現(xiàn)。NSArray 看類簇的實現(xiàn)
其中對NSArray和NSMutableArray的猜測如下,兩者調(diào)用alloc方法后,均返回一個__NSPlaceholderArray的對象。其在調(diào)用init方法,由他判斷是NSArray或是NSMutableArray,生成對應(yīng)的對象。(判斷方式通過alloc方法中的靜態(tài)變量的地址)PS:所有的初始化的內(nèi)容為空的不可變數(shù)組,其均指向NSArray的alloc方法中的靜態(tài)變量。
自定義類簇的公共類的子類,需要重寫該公共類的許多方法
由于該公共類中的多數(shù)方法的實現(xiàn)均是通過其私有子類完成。因此,需要自定義的子類重寫該類的許多方法。