iOS 類簇(class cluster)

概括

類簇是一種設計模式(抽象工廠模式),它管理了一組隱藏在公共接口下的私有類。

詳解

簡單來說,我們調(diào)用的是父類抽象類,在抽象類里面會有諾干個私有子類,這些子類對于調(diào)用者來說是不公開的,然后會根據(jù)參數(shù)自動去實例化對應的子類。

下面看一個示例

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]) {
        //為了避免重復調(diào)用
        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];

這樣如果系統(tǒng)版本是10及以上,則testClusterTestNew,否則為ClusterTestOld對象

4 總結(jié)

這樣有個好處就是在調(diào)用的地方顯得很簡潔,就算以后增加了判斷條件,也不會有任何的影響

參考鏈接

參考一
參考二
參考三

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 類簇實際上是Foundation framework框架下的一種設計模式,它管理了一組隱藏在公共接口下的私有類。 ...
    24c41111e47b閱讀 9,479評論 1 28
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,623評論 18 399
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,241評論 0 62
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,579評論 30 472
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,419評論 0 2

友情鏈接更多精彩內(nèi)容