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