转载自 http://www.cnblogs.com/qianLL/p/5230323.html

 

第一章:代码无错就是优-简单的工厂模式

先建立一个计算类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;
}
复制代码