ios大话设计模式-简单工厂
标签(空格分隔): ios进阶
1.什么是简单工厂
SimpleFactory根据提供给它的数据,返回一个类的实例。
通常它返回的类都有一个公共的父类(或者接口对象)
2.简单工厂的作用
简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。
简单工厂实例化的类具有相同的接口或者基类,
在子类比较固定并不需要扩展时,可以使用简单工厂。
如数据库生产工厂就是简单工厂的一个应用。
3.简单工厂的优缺点
避免了直接实例化类,降低了耦合性;
缺点是可实例化的类型在编译期间已经被确定,如果增加新类型,
简单工厂需要知道所有要生成的类型,当子类过多或者子类层次过多时不适合使用。
4.实践
利用简单工厂写一个计算器, numberA,nuberB,
为两个参数,+,-,*/手动设置运算符
1.先制定计算协议
定义一个protocol文件 .h即可
两个参数 numbera,numberb 和计算方法calculate
“`
“`
#import <Foundation/Foundation.h>
@protocol CalculateFactoryProtocol <NSObject>
@property(nonatomic, assign) int numberA;
@property(nonatomic, assign) int numberB;
@property(nonatomic, strong) NSString* test;
-(CGFloat)calcuate;
@end
2.再制定具体的计算规则 规则是要尊徐协议 代码如下
“`
#import "MutiCalculate.h"
@implementation MutiCalculate
@synthesize numberA = _numberA;//生成协议中的变量
@synthesize numberB = _numberB;//生成协议中的变量
@synthesize test = _test;//生成协议中的变量
-(CGFloat)calcuate
{
return self.numberA * self.numberB;
}
@end
等等+ - / 不举出来了
3.建造工厂
工厂负责返回根据指令规则指定的计算规则
#import "CalculateFactory.h"
#import "MinusCalculate.h"
#import "AddCalculate.h"
#import "MutiCalculate.h"
#import "DevideCalculate.h"
@implementation CalculateFactory
+(id<CalculateFactoryProtocol>)createCalculateWith:(NSString*)typeString
{
NSArray* calculateTypeArray = @[@"+",@"-",@"*",@"/"];
calculateType type = [calculateTypeArray indexOfObject:typeString];
switch (type) {
case calculateTypeAdd:
return [[AddCalculate alloc] init];
break;
case calculateTypeMinus:
return [[MinusCalculate alloc] init];
break;
case calculateTypeMuti:
return [[MutiCalculate alloc] init];
break;
case calculateTypeDevide:
return [[DevideCalculate alloc] init];
break;
default:
break;
}
}
4具体调用
//assign the detail protocol
id<CalculateFactoryProtocol>cal = [CalculateFactory createCalculateWith:@"*"];
cal.numberA = 20;
cal.numberB = 40;
// run the protocol
NSLog(@"%f",[cal calcuate]);
打印结果
800.00
“`
demo下载地址