OC——52个有效方法:9.类族模式

2018-01-16  本文已影响35人  梦蕊dream

"类族"(class cluster),较为有用的模式(pattern),可以隐藏"抽象基类"(abstract base class)背后的实现细节.用户无需自己创建子类实例,只需调用基类方法来创建即可.

创建类族

示例代码:大致逻辑

父类雇员LETEmployee
#import <Foundation/Foundation.h>

typedef NS_ENUM(NSUInteger,LETEmployeeType){
    LETEmployeeTypeDeveloper,
    LETEmployeeTypeDesigner,
    LETEmployeeTypeManager,
};

@interface LETEmployee : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) float salary;
+ (LETEmployee *)emploryWithType:(LETEmployeeType)type;
- (void)doDaysWork;

@end
------------------------------------------------------------------------
#import "LETEmployee.h"

@implementation LETEmployee
+ (LETEmployee *)emploryWithType:(LETEmployeeType)type{
    switch (type) {
        case LETEmployeeTypeManager:
            return [LETEmployeeTypeManager new];
            break;
        case LETEmployeeTypeDesigner:
            return [LETEmployeeTypeDesigner new];
            break;
        case LETEmployeeTypeDeveloper:
            return [LETEmployeeTypeDeveloper new];
            break;
        default:
            break;
    }
}
- (void)doDaysWork{
    
}
@end
子类开发人员:LETDeveloper
#import "LETEmployee.h"

@interface LETDeveloper : LETEmployee

@end
------------------------------------------------------------
#import "LETDeveloper.h"

@implementation LETDeveloper
- (void)doDaysWork{
    [self wirteCode];
}
@end

使用"工厂模式"创建类族方法之一.如果某对象所属类位于某个类族中,在查询类型信息时,需要注意.上述例子中:[employee isMemberOfClass:[LETEmployee class]]返回的值是NO.因为employee不是LETEmployee类的实例,而是LETDeveloper的实例.

上一篇 下一篇

猜你喜欢

热点阅读