[ios设计模式]简单工厂模式【转】
来源:互联网 发布:世界人均财富知乎 编辑:程序博客网 时间:2024/05/21 11:37
前言
自上一篇文章有两个礼拜的时间了,本来想余下一段时间内尽量用英文写文章,包括技术文。前两天点点网的统计数据里添加了对每个博客里文章访问量的一个排 名,发现我的博客里访问最多的竟然是Objective C!说实话,有些意外,后细想来也许有很多和我一样的初学者朋友想学习这门语言,犹豫再三,本着分享知识的原则,还是用中文写吧,其他类型的文章再当练习 英语,用英文来写。好啦,废话就到这里吧,接下来进入正题。
今天开始,我们来探讨一下用Objective C来简单实现的常见的设计模式。这次想和大家分享的是:简单工厂模式。
严格说来,简单工厂模式不属于GoF的23种设计模式之列,但是作为简单的入门知识,我还是想从简单工厂模式开始说起。
正如此模式的名称一样,简单工厂模式基本上是所有设计模式里最简单的一种,类与类之间的关系一目了然。这次我就用很多地方经常举的例子--计算器,来说明这个模式。首先给大家展示一下类之间的结构图:
通过这张结构图,可以清晰的看到,加法类、减法类、乘法类、除法类继承自运算类,简单工厂类依赖于运算类的实例化来实现相应的运算功能,好的,看起来并不复杂,让我们直接展示一下代码吧(鉴于目前点点不支持Objective C的代码高亮,所以就直接写啦,尽量保持整齐吧。另,为了照顾像我一样基础不是很好的同学,我尽量把代码写全,方便大家调试)。
首先是运算类(父类):
接口文件:
#import <Foundation/Foundation.h>
@interface
Operation :
NSObject
{
double
numberA;
double
numberB;
}
@property
double
numberA;
@property
double
numberB;
-(
double
) GetResult;
@end
实现文件:
#import"Operation.h"
@implementation
Operation
@synthesize
numberA, numberB;
-(
double
) GetResult{
return
-1.0;
//此处默认返回-1.0,无其他意义
}
@end
加法类(运算子类):
接口文件:
#import "Operation.h"
@interface
OperationAdd:Operation
@end
实现文件:
#import "OperationAdd.h"
@implementation
OperationAdd
-(
double
) GetResult{
double
result =0;
result =numberA+numberB;
return
result;
}
@end
减法类(运算子类):
接口文件:
#import "Operation.h"
@interface
OperationSub:Operation
@end
实现文件:
#import "OperationSub.h"
@implementation
OperationSub
-(
double
)GetResult{
double
result =0;
result = numberA-numberB;
return
result;
}
@end
乘法类(运算子类):
接口文件:
#import "Operation.h"
@interface
OperationMul:Operation
@end
实现文件:
#import "OperationMul.h"
@implementation
OperationMul
-(
double
)GetResult{
double
result =0;
result = numberA*numberB;
return
result;
}
@end
除法类(运算子类):
接口文件:
#import "Operation.h"
@interface
OperationDiv:Operation
@end
实现文件:
#import "OperationDiv.h"
@implementation
OperationDiv
-(
double
)GetResult{
double
result =0;
@try
{
result = numberA/numberB;
}
@catch
(
NSException
*exception) {
NSLog
(@
"除数不能为0"
);
}
return
result;
}
@end
下面是工厂类(依赖实例化运算类实现具体功能):
接口文件:
#import <Foundation/Foundation.h>
#import "OperationAdd.h"
#import "OperationDiv.h"
#import "OperationSub.h"
#import "OperationMul.h"
@interface
OperationFactory:
NSObject
+(Operation*)CreateOperate:(
char
)operate;
@end
实现文件:
#import "OperationFactory.h"
@implementation
OperationFactory
+(Operation*)CreateOperate:(
char
)operate{
Operation *oper;
switch
(operate) {
case
'+'
:
oper = [[OperationAdd alloc]init];
break
;
case
'-'
:
oper = [[OperationSub alloc]init];
break
;
case
'*'
:
oper = [[OperationMul alloc]init];
break
;
case
'/'
:
oper = [[OperationDiv alloc]init];
break
;
default
:
oper =
nil
;
break
;
}
return
oper;
}
@end
具体调用:
#import <Foundation/Foundation.h>
#import "OperationAdd.h"
#import "OperationDiv.h"
#import "OperationMul.h"
#import "OperationSub.h"
#import "OperationFactory.h"
int
main (
int
argc,
const
char
* argv[])
{
@autoreleasepool
{
Operation *oper = [OperationFactory CreateOperate:
'*'
];
[oper setNumberA:1];
[oper setNumberB:2];
double
result = 0;
result = [oper GetResult];
NSLog
(@
"Result is %f"
, result);
}
return
0;
}
好啦,上面罗列的是简单工厂模式的基础代码。其实还是挺简单的,对吧,只有一层继承关系,一个依赖关系,在工厂类里面用switch语句判别需要实例化哪种类型,之后进行计算,获取结果。
That's all!下次继续吧!
个人总结:运算类的职责是抽象化并提供动作类的共同的行为,动作类继承运算类
工厂类的职责是根据需求给你返回需要的动作类,他跟运算类,动作类没有逻辑性的联系,只提供一个环境而已。
- [ios设计模式]简单工厂模式【转】
- ios--设计模式--简单工厂模式
- iOS设计模式 - (3)简单工厂模式
- iOS设计模式 - (3)简单工厂模式
- iOS设计模式之简单工厂模式
- iOS设计模式之简单工厂模式
- iOS设计模式(二) 简单工厂,工厂,抽象工厂
- ios大话设计模式-简单工厂
- iOS常用设计模式——简单工厂设计模式
- (转)设计模式读书笔记-----简单工厂模式
- 简单工厂设计模式
- 设计模式-----简单工厂
- 简单工厂设计模式
- 设计模式:简单工厂
- 设计模式 - 简单工厂
- 设计模式 简单工厂
- 【设计模式】【简单工厂】
- 简单工厂设计模式
- [ios2] IOS4的多任务机制概述
- URL 编码:CFURLCreateStringByAddingPercentEscapes[转]
- [ios2]10个迷惑新手的Cocoa及Objective-C开发难点和问题 【转】
- [ios2] 缓存机制
- [ios2] iOS 5的文件存储策略应对【转】
- [ios设计模式]简单工厂模式【转】
- [ios2] 推送
- [原创] 自定义UIAlertView
- [ios2]IOS NSInvocation用法简介【转】
- [ios2]NSUndoManager 【转】
- [资源] 好用的博客地址
- [ios2] iOS图片拉伸技巧 【转】
- [ios2] socket通信
- [ios2] UIImageView实现图片的移动和缩放 【转】