#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]; }