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];
}
相关文章
相关标签/搜索