七.類族設(shè)計(jì)模式

1.用統(tǒng)一的父類創(chuàng)建類接口穿件對(duì)象,具體實(shí)現(xiàn)都在各自子類。(UIButton NSArray 都是類簇模式)

//  HuEmployee.h
#import <Foundation/Foundation.h>

typedef NS_ENUM(NSUInteger, HuEmployeeType){
    HuEmployeeTypeDeveloper,
    HuEmployeeTypeDesigner,
    HuEmployeeTypeFinance,
};

@interface HuEmployee : NSObject
@property(nonatomic, copy)NSString *name;
@property(nonatomic, assign)NSUInteger salary;

//1.定義類方法,根據(jù)不同type,放回同一父類對(duì)象
+(HuEmployee*)employeeWithType:(HuEmployeeType)type;

-(void)doWork;

@end
//  HuEmployee.m
#import "HuEmployee.h"

//3.定義各自子類
@interface HuEmployeeDeveloper : HuEmployee

@end

@implementation HuEmployeeDeveloper

-(void)doWork
{
    [self writeCode];
}

-(void)writeCode
{
    /////
}

@end

@interface HuEmployeeDesigner : HuEmployee

@end

@implementation HuEmployeeDesigner

-(void)doWork
{
    [self desighApp];
}

-(void)desighApp
{
    /////
}
@end

@interface HuEmployeeFinance : HuEmployee

@end

@implementation HuEmployeeFinance

-(void)doWork
{
    [self manageFinance];
}

-(void)manageFinance
{
    ////
}
@end

@implementation HuEmployee

//2.抽象基類沒有特殊標(biāo)識(shí),一般不定義init方法 也不實(shí)現(xiàn)抽象函數(shù),各自在子類里實(shí)現(xiàn)
+(HuEmployee*)employeeWithType:(HuEmployeeType)type
{
    switch (type) {
        case HuEmployeeTypeDeveloper:
            return [HuEmployeeDeveloper new];
            break;
        case HuEmployeeTypeDesigner:
            return [HuEmployeeDesigner new];
            break;
        case HuEmployeeTypeFinance:
            return [HuEmployeeFinance new];
            break;
        default:
            break;
    }

    return nil;
}

-(void)doWork
{
    //2.1拋出一個(gè)異常,避免在基類里面實(shí)現(xiàn)
    NSException *e = [NSException
                      exceptionWithName: @"exceptionName"
                      reason: @"必須在子類實(shí)現(xiàn)改方法"
                      userInfo: nil];
    @throw e;
}

@end

2.判斷莫類是否屬于是一個(gè)特定之類

@interface HuBusinessSupport : NSObject

@end

@implementation HuBusinessSupport

-(void)doSomeTest
{
    HuEmployee *employee = [HuEmployee employeeWithType:HuEmployeeTypeDeveloper];
    //4.判斷是否屬于某個(gè)子類
//    //4.1不用要如下方法檢測(cè),一直成立
//    if ([employee isMemberOfClass:[HuEmployee class]]){
//        //一直為true
//    }
    //4.2用如下方法  直接用子類判斷
    if([employee isKindOfClass:[HuEmployeeDeveloper class]])
    {
        //正確
    }
}

@end

如果你發(fā)現(xiàn)本文對(duì)你有所幫助,如果你認(rèn)為其他人也可能受益,請(qǐng)把它分享出去。

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

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

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