類簇是Foundation框架中廣泛使用的設計模式。類簇將一些私有的、具體的子類組合在一個公共的、抽象的超類下面,以這種方法來組織類可以簡化一個面向對象框架的公開架構,而又不減少功能的豐富性。
基本介紹
- 中文名:類簇
- 外文名:class cluster
- 類型:設計模式
- 框架:Foundation
- 性質:簡潔性和可擴展性之間
在類簇中創建子類,類簇的概念,類簇架構代表一個反映簡單概念的設計。,
在類簇中創建子類
類簇架構是具有簡潔性和可擴展性之間的一個折衷。用幾個公共類代表多個私有類可以使框架中的類易學易用,但是在某種程度上增加創建類簇子類的難度。然而如果很少需要創建子類,則類簇架構則有明確的好處。Foundation框架只在這種情況下使用類簇。
如果您發現某個類簇沒有提供您的程式需要的功能,則可能適合引入一個子類。舉例來說,假定您希望創建一個數組對象,其存儲是基於檔案的,而不是如NSArray類簇那樣是基於記憶體的。由於您需要改變類的存儲機制,所以需要創建子類。
另一方面,在某些情況下可能定義一個擁有類簇對象的類就夠了(而且更加容易)。假定您的程式需要在某些數據被修改的時候得到通知,則為Foundation框架中定義的數據對象創建一個簡單的包裝類可能是最好的方法。該類的對象可以干預修改數據的訊息,將它截獲並進行必要的動作,然後再轉發給嵌入的數據對象。
總的來說,如果您需要管理對象的存儲,就創建一個真的子類。否則,就創建一個合成對象,即將標準的Foundation框架對象嵌入到您自己設計的對象中。
類簇的概念
類簇 是一群隱藏在通用接口下的與實現相關的類,使得我們編寫的代碼可以獨立於底層實現(因為接口是穩定的)。
如創建NSString對象時,你得到的可能是NSLiteralString,NSCFString,NSSimpleCString等。即不同的NSString對象調用同一個接口A,接口A的實現可能是不同的。
在Foundation框架中,常見的類簇有NSString,NSArray,NSDictionary等。 想要在類簇中創建子類會困難一些,必須是抽象超類的子類,必須重載超類的原始方法,必須聲明自己的數據存儲。最方便的是使用組合或者類別來代替子類化。
類簇架構代表一個反映簡單概念的設計。
類簇中的抽象超類必須聲明創建其私有子類的方法。根據調用的創建方法分配正確類型的對象是超類的責任。在Foundation框架中,通常通過調用+ className...或alloc...和init...方法來創建對象。以Foundation框架的NSNumber類為例,可以傳送如下的訊息來創建數字對象:
NSNumber *aChar = [NSNumber numberWithChar:’a’]; |
NSNumber *anInt = [NSNumber numberWithInt:1]; |
NSNumber *aFloat = [NSNumber numberWithFloat:1.0]; |
NSNumber *aDouble = [NSNumber numberWithDouble:1.0]; |