iOS开发设计策略模式

iOS应用能加密?全球都没有的技术,你造吗?作为开发iOS应用的,是不是感到自己out啦?快来看看什么是iOS应用加密:http://www.ijiami.cn/newsInfo?id=541&v=2

在iOS开发中,使用官方框架,官方sdk中,可以接触到不少设计模式,可能平时没有注意,实际上已经用到了不少设计模式

下面举一个例子:

策略模式:至于什么是策略模式,请自己百度吧,我也说不清楚,但是知道怎么用,下面结合代码详细说明

比方我有一个NSMutableArray,里面每个元素都是一个NSDictionary,其中NSDictionary有不少“键--值”对,我想以“键1对应的值1”为标准,对NSMutableArray进行排序。

NSMutableArray

---NSDictionary1

------“name”:"zhangsan"

------“age”:“30”

---NSDictionary2

------“name”:"lisi"

------“age”:“28“

---NSDictionary3

------“name”:"lisi"

------“age”:“48“

下面我需要针对”age“字段进行排序

那么策略模式在这里就是这么展示的:你丢给NSMutableArray对象一个排序的方法(一个策略),那么他就拿这个方法对内部的元素进行排序,你丢给他不同的方法(也就是不同的策略<实际的每个策略,不简单是一个参数,而是做一件事情的完整过程>),他就给你不同的结果。

下面贴代码

NSArray中存放的是NSDictionary,可以使用策略的方法对NSDictionary进行定制,增加比较的方法。然后调用NSArray的sortUsingSelector方法对数组进行排序,这里使用NSDictionay中的时间对象的时间排序。具体操作如下:

1.定制NSDictionary

XXX.h文件

@interface NSMutableDictionary(myCompare)

-(NSComparisonResult)myCompareMethodWithDict: (NSMutableDictionary*)theOtherDict;

@end

XXX.m文件

#import "CustomDictionary.h"

@implementation NSMutableDictionary(myCompare)

- (NSComparisonResult)myCompareMethodWithDict:(NSMutableDictionary*)anotherDict

{

NSMutableDictionary *firstDict = self;

int iSelfAge =[ [firstDict objectForKey: @"age"]intValue];

int iOtherAge = [[anotherDict objectForKey: @"age"]intValue];

//return [firstDate compare: secondDate];

//       //NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending}

if(iSelgAge<iOtherAge)return NSOrderedAscending;

else if (iSelgAge==iOtherAge)return NSOrderedSame;

else return NSOrderedDescending;

}

@end

2.使用myCompareMethodWithDict对NSArray进行排序,假设NSArray是从plist文件中读取的NSDictionary对象的数组。

NSString* documentsDirectory = [paths objectAtIndex:0];

NSString *plistPath = [NSString stringWithFormat:@"%@/XXX.plist",documentsDirectory];

NSMutableDictionary * cacheData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];

[cacheArray sortUsingSelector:@selector(myCompareMethodWithDict:)];//根据年龄降序排序

这样,cacheArray就是排序好的数组了。

时间: 2024-10-07 21:05:47

iOS开发设计策略模式的相关文章

Android开发之策略模式初探

策略模式主要定义一系列的算法,学过数据结构的朋友肯定知道,对于数组从大到小进行排序有着很多的算法,比如冒泡.交换.快速插入等等,策略模式就是把这些算法封装成一个个独立的类,方便使用时候进行任意的调用.这里以字符串替代为例, 有一个文件,我们需要读取后,希望替代其中相应的变量,然后输出.关于替代其中变量的方法可能有多种方法,这取决于用户的要求,所以我们要准备几套变量字符替代方案. 首先,我们建立一个抽象类RepTempRule 定义一些公用变量和方法: public abstract class

iOS开发-简单工厂模式

设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.概念很长,iOS开发中最常遇到的有单例模式,观察者模式(KVO),简单工厂模式其实在开发中也非常常见,就是由工厂类根据传入的参数,动态决定应该创建出对应的产品类的实例. 基础概念 举一个生活的例子是我们有各种中字开头的银行卡,我们每天都会消费,消费的时候每个银行卡提示不同的信息,我们可以先抽象出来一个银行卡类: @inter

iOS设计模式 - (4)策略模式

理论部分,参考博文:http://blog.csdn.net/hguisu/article/details/7558249 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法:当然也可以将这些查找算法封装在一个统一的方法中,

100个iOS开发/设计面试题汇总

常见问题 你昨天/这周学习了什么? 你为什么热衷于软件开发? 你对哪一种控制系统比较熟悉? 是否参与过GitHub项目? 是否参与过GitHub或其他同类型网站的iOS开源项目? 请描述一下你的iOS应用开发流程. 是否熟知CocoaPods?它是什么?如何运行的? 请概括一下你对软件授权的理解,及其对软件开发的影响. 请概括一下你在构建iOS应用时的测试过程.iOS应用如何实现对其他语言.日期格式以及货币单位的支持? 请描述一下Instruments及其作用. 关于iOS技术 请解释一下Han

iOS开发/设计面试题汇总

无论是对于公司还是开发者或设计师个人而言,面试都是一项耗时耗钱的项目,本文从编程.设计.App Store等各个方面对iOS开发者及设计师在面试时可能会遇到的问题进行了筛选与汇总.一方面,能够帮助HR在短时间内获取更多反馈信息,更好地甄选合适人选,而iOS开发者及设计师在寻找相关工作时,也可作为参考,为面试做好万全准备. 常见问题 你昨天/这周学习了什么?  回答:· 你为什么热衷于软件开发? 你对哪一种控制系统比较熟悉? 是否参与过GitHub项目? 是否参与过GitHub或其他同类型网站的i

100个iOS开发/设计面试题汇总,你将如何作答?

原文: http://www.csdn.net/article/2015-01-19/2823604-ios-interview-questions 常见问题 你昨天/这周学习了什么? 你为什么热衷于软件开发? 你对哪一种控制系统比较熟悉? 是否参与过GitHub项目? 是否参与过GitHub或其他同类型网站的iOS开源项目? 请描述一下你的iOS应用开发流程. 是否熟知CocoaPods?它是什么?如何运行的? 请概括一下你对软件授权的理解,及其对软件开发的影响. 请概括一下你在构建iOS应用

ios开发设计电影院

这里首先给出了大家一个大致的需求分析,在之后软件的开发过程中 会随着需求的变化,将一些功能更加完善一些 /* 习题8: 在我们的现实生活中我们要去电影院看电影,都会经历一个痛苦的过程, 那就是排队买票,如果我们能够将这一过程放到手机上用软件来完成,那会大大减少我们观看电影排队过程的痛苦,所以我们要将这一过程软件话. 需求分析: 1.要有影讯信息 2.选择我要看的电影 3.选择座位 4.打印票据信息 找对象 设计类 类名:电影院 属性:名称.票价.排数.座位号.影厅 方法:选择电影.选择影厅.选择

ios开发中MVC模式的理解

MVC是80年代出现的一种软件设计模式,是模型(model),视图(view)和控制(Controller)的缩写. 其中Model的主要功能包括业务逻辑的处理以及数据的访问,这是应用程序的主体部分. View的主要功能是用来跟用户进行交互,实现数据的收集和展示,视图是用户看到和直接操作的的界面,它只接受用户的操作. Controller的主要功能用来在视图和模型之间建立联系并控制数据的走向,控制器本身不输出任何内容和对数据做任何处理. 用个简单的例子来说明三者的关系 一个简单的计算器,它除了我

通知模式实现两个textField传值及模态视图——iOS开发

通知模式实现两个textField传值及模态视图--iOS开发 利用通知模式,实现两个不同界面的textField之间的传值,在界面二输入字符,传值到前一界面的textField. 界面的切换,这里临时先用模态视图实现.(重点在传值.所以没纠结设计界面排版.丑了点大家见谅) 大家不要看代码看上去好像挺多.由于我没使用storyboard/xib,是代码实现布局,所以通知和模态视图切换的代码非常少~ 实现效果: 点击下一页按钮,进入界面二: 在textField处输入字符串: 点击返回按钮,回到界