OC高效率52之以類族模式隱藏實現細節

#pragma mark 建立類族
#import <Foundation/Foundation.h>
//定義抽象基類
typedef NS_ENUM(NSUInteger,EOCEmployeeType)
{
    EOCEmployeeTypeDeveloper,
    EOCEmployeeTypeDesigner,
    EOCEmployeeTypeFinance,
};
@interface EOCEmployee : NSObject
@property (copy) NSString *name;
@property NSUInteger salary;

+(EOCEmployee *)employeeWithType:(EOCEmployeeType) type;

-(void)doADaysWork;

@end

#import "EOCEmployee.h"
#import "EOCEmployeeDeveloper.h"
@implementation EOCEmployee
+(EOCEmployee *)employeeWithType:(EOCEmployeeType)type//工廠模式  根據建立的類別 分配對應的實例
{
    switch (type) {//參照uibutton  根據不一樣類型 建立不一樣的button
        case EOCEmployeeTypeDeveloper:
            return [EOCEmployeeDevelop new];
            break;
        case EOCEmployeeTypeDesigner:
            //            return [EOCEmployeeTypeDesigner new];
            break;
        case EOCEmployeeTypeFinance:
            //            return [EOCEmployeeTypeFinance new];
            break;
    }
    return [EOCEmployee new];
}

-(void)doADaysWork
{
//子類覆寫
    
     //判斷出某個實例所屬的類是否位於類族之中
    id maybeArray;
    if ([maybeArray isKindOfClass:[NSArray class]])
    {
    //do some thing
    }
}
@end
#import "EOCEmployee.h"

@interface EOCEmployeeDevelop : EOCEmployee

@end

#import "EOCEmployeeDeveloper.h"

@implementation EOCEmployeeDevelop
+(EOCEmployee *)employeeWithType:(EOCEmployeeType)type
{
    switch (type) {
        case EOCEmployeeTypeDeveloper:
            return [EOCEmployeeDevelop new];
            break;
        case EOCEmployeeTypeDesigner:
//            return [EOCEmployeeTypeDesigner new];
            break;
        case EOCEmployeeTypeFinance:
//            return [EOCEmployeeTypeFinance new];
            break;
    }
    return [EOCEmployee new];
}

-(void)doADaysWork
{
//    [self writeCode];
}
相關文章
相關標籤/搜索