"类族"(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
的实例.
网友评论