您的位置:首页 > 移动开发 > IOS开发

iOS常用设计模式——简单工厂设计模式

2015-04-02 16:58 489 查看

简单工厂设计模式详解

简单工厂设计模式详解
基本概念

结构图

经典的示例

示例代码

优点

缺点

使用条件

基本概念

“专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。”

世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例。

结构图



ConcreteProduct1和ConcreteProduct2两个产品具有一个共同的父类IProject,简单工厂类为SimpleFactory,负责根据传入的不同参数来决定生产ConcreteProduct1还是ConcreteProduct2产品。

经典的示例

最经典的示例就是运算类,加、减、乘、除四个运算符都继承自父类Operation,有两个属性和一个操作方法,这些加减乘除的对象并不是直接在ViewController中创建,而是根据输入操作符,由简单工厂OperationFactory来创建。



示例代码

(1)创建一个协议OprationProtocol,由父类Operation来遵从该协议

/*
*  操作方法协议接口
*/
@protocol OperationProtocol <NSObject>
-(double)getResult;
@end


(2)定义加减乘除操作的父类Operation

#import OperationProtocol.h
/*
*  操作方法父类
*/
@interface Operation : NSObject<operationprotocol>
@property double firstNum;//第一个操作数
@property double secondNum;//第二个操作数
@end


(3)加减乘除实现类,此处以”加”举例说明

//OperationAdd.h文件
#import Operation.h
/*
*  加法实现类
*/
@interface OperationAdd : Operation
@end

//OperationAdd.m文件
#import "OperationAdd.h"
@implementation OperationAdd
-(double)getResult
{
double result = 0;
result = self.firstNum+self.secondNum;//"+"是OperationAdd时候使用,"+-*/"分别对应"加减乘除"
return result;
}
@end


(4)简单工厂类的代码

//OpeartionFactory.h file
#import Operation.h
#import OperationAdd.h
#import OperationSub.h
#import OperationMultiply.h
#import OperationDivide.h
/*
*  操作工厂类
*/
@interface OperationFactory : NSObject

//获得操作对象
+(Operation*)createOperate:(NSString*)operateStr;

@end

//OpeartionFactory.m file
#import "OperationFactory.h"
@implementation OperationFactory

+(Operation*)createOperate:(NSString*)operateStr
{
Operation* oper = nil;
//根据不同的操作符,创建不同的操作对象,"+-*/"分别对应"加减乘除"
if ([operateStr isEqualToString:@"+"]) {
oper = [[OperationAdd alloc] init];
}else if ([operateStr isEqualToString:@"-"]){
oper = [[OperationSub alloc] init];
}else if ([operateStr isEqualToString:@"*"]){
oper = [[OperationMultiply alloc] init];
}else if ([operateStr isEqualToString:@"/"]){
oper = [[OperationDivide alloc] init];
}
return oper;
}
@end


(5)客户端代码,在ViewController中使用OperationFactory

NSString* strFirstNum = self.firstNumTextField.text;
NSString* strSecondNum = self.secondNumTextField.text;
Operation* oper;
oper = [OperationFactory createOperate:self.operationTextField.text];
oper.firstNum = [strFirstNum doubleValue];
oper.secondNum = [strSecondNum doubleValue];
self.resultTextField.text = [NSString stringWithFormat:@%f,[oper getResult]];


通过简单工厂模式的重构,我们就是闲了低耦合度的代码结构,做到了对外扩展开放,对修改关闭。如果再增加任何的操作方法,只需要继承操作方法父类,新建一个操作子类,并且在简单工厂类里面多添加一个else if的判断即可。

优点

简单工厂方法从代码中消除了对应用程序特有类的耦合,调用者不必关心具体实现,取消了常建者的责任,实现了对责任的分割

缺点

工程类集中了所有产品的逻辑,一旦不能正常工作,整个系统受影响,当分类较多时,所有创建工作都在工厂方法中实现,后期扩展较为发杂

使用条件

(1)工厂类负责创建的对象较少时;

(2)客户端只知道传入工厂类的参数,对于如何创建对象的逻辑不必关心时。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息