第一章:代碼無錯就是優-簡單的工廠模式 先建立一個計算類Operation Operation.h文件 @interface Operation : NSObject @property(nonatomic,assign)double numberA; @property(nonatomic,ass
第一章:代碼無錯就是優-簡單的工廠模式
先建立一個計算類Operation
Operation.h文件
@interface Operation : NSObject @property(nonatomic,assign)double numberA; @property(nonatomic,assign)double numberB; @end
Operation.m文件
@implementation Operation @end
然後分別創建他們的子類Add,Sub,Mul,Div
Add.h
#import "Operation.h" @interface Add : Operation -(double)OperationAdd; @end
Add.m
#import "Add.h" @implementation Add -(double)OperationAdd{ return self.numberA+self.numberB; }
@end
Sub.h
#import "Operation.h" @interface Sub : Operation -(double)operaSub; @end
Sub.m
#import "Sub.h" @implementation Sub - (double)operaSub{ return self.numberA-self.numberB; } @end
Mul.h
#import "Operation.h" @interface Mul : Operation -(double)OperaMul; @end
Mul.m
#import "Mul.h" @implementation Mul -(double)OperaMul{ return self.numberA*self.numberB; } @end
Div.h
#import "Operation.h" @interface Div : Operation -(double)OperaDiv; @end
Div.m
#import "Div.h" @implementation Div -(double)OperaDiv{ // double result=0.0; if (self.numberB==0) { NSLog(@"除數不能為0"); } return self.numberA/self.numberB; } @end
計算的工廠類OperationFactory.h
#import <Foundation/Foundation.h> #import "Add.h" #import "Sub.h" #import "Mul.h" #import "Div.h" #import "Operation.h" @interface OperationFactory : NSObject @property(nonatomic,strong)Add *add; @property(nonatomic,strong)Sub *sub; @property(nonatomic,strong)Mul *mul; @property(nonatomic,strong)Div *div; -(double)createOperate:(char)opreate; @end
OperationFactory.m
#import "OperationFactory.h" @implementation OperationFactory -(double)createOperate:(char)opreate{ double result = 0.0; switch (opreate) { case '+': result= self.add.OperationAdd; break; case '-': result=self.sub.operaSub; break; case '*': result=self.mul.OperaMul; break; case '/': result=self.div.OperaDiv; break; } return result; } @end
主函數
#import <Foundation/Foundation.h> #import "OperationFactory.h" int main(int argc, const char * argv[]) { @autoreleasepool { double result; OperationFactory *factory=[[OperationFactory alloc]init]; Add *ad=[Add new]; ad.numberA=10; ad.numberB=6; factory.add=ad; // Div *di=[Div new]; // di.numberA=21; // di.numberB=0; // factory.div=di; //// result =[factory createOperate:'/']; result=[factory createOperate:'+']; NSLog(@"%lf",result); } return 0; }