iOS开发——工厂模式
工厂模式很好用,为表诚意,我直接搞个实用的例子放这,解析一个订单的数据,并且这个订单里面可能不止一件商品的做法。
还是直接上代码,不懂的地方,再提出来。
1.在MyOrderDeals.h文件中
#import <Foundation/Foundation.h>
@interface MyOrderDeals : NSObject
@property(nonatomic,strong) NSString *id;
@property(nonatomic,strong) NSString *orderID;
@property(nonatomic) float allMoney;
@property(nonatomic) float transportationCost;
@property(nonatomic,strong) NSMutableArray *goodsArr;
+(id)myOrderDealsWithDict:(NSDictionary*)dict;
@end
2.在MyOrderDeals.m文件中
#import "MyOrderDeals.h"
#import "SingleOrderCellDeal.h"
@implementation MyOrderDeals
+(id)myOrderDealsWithDict:(NSDictionary *)dict {
return [[self alloc] initWithDict:dict];
}
-(id)initWithDict:(NSDictionary*)dict{
self = [super init];
if (self) {
self.id = dict[@"id"];
self.orderID = dict[@"order_sn"];
self.allMoney = [dict[@"pay_amount"] floatValue];
self.transportationCost = [dict[@"delivery_fee"] floatValue];
self.goodsArr = [NSMutableArray array];
for (NSDictionary *singleDealDict in dict[@"goods"]) {
SingleOrderCellDeal *deal = [SingleOrderCellDeal singleOrderDealCellWithDict:singleDealDict];
[self.goodsArr addObject:deal];
}
}
return self;
}
@end
3.在SingleOrderCellDeal.h文件中
#import <Foundation/Foundation.h>
@interface SingleOrderCellDeal : NSObject
@property(nonatomic,strong) NSString *title;
@property(nonatomic) float currentPrice;
@property(nonatomic,strong) NSString *selledCount;
@property(nonatomic,strong) NSURL *imageURL;
+(id)singleOrderDealCellWithDict:(NSDictionary*)dict;
@end
4.在SingleOrderCellDeal.m文件中
#import "SingleOrderCellDeal.h"
@implementation SingleOrderCellDeal
static NSString *imageURL = @"http://www.joinbuy.cn";
+(id)singleOrderDealCellWithDict:(NSDictionary *)dict {
return [[self alloc] initWithDict:dict];
}
-(id)initWithDict:(NSDictionary*)dict{
self = [super init];
if (self) {
self.title = dict[@"name"];
self.currentPrice = [dict[@"unit_price"] floatValue];
self.selledCount = dict[@"number"];
self.imageURL = [NSURL URLWithString:[imageURL stringByAppendingString:dict[@"icon"]]];
}
return self;
}
@end
5.在需要调用的地方
#import "MyOrderDeals.h"
#import "SingleOrderCellDeal.h"
@property(nonatomic,strong) NSMutableArray *myOrders;
-(NSMutableArray *)myOrders{
if (!_myOrders) {
_myOrders = [NSMutableArray array];
}
return _myOrders;
}
//在从服务器导下一组订单数据后
NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
for (NSDictionary *dict in array) {
MyOrderDeals *deal = [MyOrderDeals myOrderDealsWithDict:dict];
[self.myOrders addObject:deal];
}
这样一来,从服务器导下来的订单数据,就都解析保存在myOrders这个数组中了,需要什么数据,只要取对应的值就行了。
iOS开发——工厂模式的更多相关文章
- iOS开发-工厂模式
工厂模式算是开发中比较常见的设计模式,简单工厂模式,工厂模式和抽象工厂模式,都属于工厂模式.简单工厂模式(simple factory)是类的创建模式,静态工厂方法(static factory me ...
- iOS 抽象工厂模式
iOS 抽象工厂模式 什么是抽象工厂模式 简单了解一下 按照惯例,我们先了解一下什么是抽象工厂模式.抽象工厂模式和工厂方法模式很相似,但是抽象工厂模式将抽象发挥的更加极致,是三种工厂模式中最抽象的一种 ...
- iOS 简单工厂模式
iOS 简单工厂模式 什么是简单工厂模式? 简单工厂模式中定义一个抽象类,抽象类中声明公共的特征及属性,抽象子类继承自抽象类,去实现具体的操作.工厂类根据外界需求,在工厂类中创建对应的抽象子类实例并传 ...
- iOS开发-代理模式
代理模式有的时候也被称之为委托模式,但是实际上两者是有分别的,代理模式为另一个对象提供一个替身或占位符访问这个对象,代理对象和控制访问对象属于同一类,委托对象和对象不一定属于同一类.两者都可以控制类的 ...
- iOS开发-策略模式
策略(Strategy)模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.策略模式是对算法的包装,是把使用算法的责任和算法本身分割开 ...
- iOS开发-模板方法模式
模板方法模式定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤.模板方法模式是由子类决定实现算法中的步骤,工厂方法由子类决定实现哪一 ...
- iOS开发-命令模式
命令模式算是设计模式中比较简单的,最常见的例子是工作任务安排下来进行编程,如果工作任务不需要完成,我们可以取消我们之前完成的代码,也可以理解为回滚撤销操作.这里面涉及到命令模式中的两个对象,一个是动作 ...
- iOS开发-状态模式
状态模式允许对象内部状态改变时改变它的行为,对象看起来好像修改了它的类.状态模式看起来和策略模式比较相像,策略模式是将可以互换的行为封装起来,然后通过使用委托的方式,决定使用哪一个行为,状态也是封装行 ...
- iOS开发-迭代器模式
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示.开发过程中,我们可能需要针对不同的需求,可能需要以不同的方式来遍历整个整合对象,但是我们不希望 ...
随机推荐
- php array_walk_recursive函数的使用
<?phpfunction myfunction($value,$key) {echo "The key $key has the value $value<br />&q ...
- UVA - 1347 Tour(DP + 双调旅行商问题)
题意:给出按照x坐标排序的n个点,让我们求出从最左端点到最右短点然后再回来,并且经过所有点且只经过一次的最短路径. 分析:这个题目刘汝佳的算法书上也有详解(就在基础dp那一段),具体思路如下:按照题目 ...
- arrayList里的快速失败
快速失败是指某个线程在迭代集合类的时候,不允许其他线程修改该集合类的内容,这样迭代器迭代出来的结果就会不准确. 比如用iterator迭代collection的时候,iterator就是另外起的一个线 ...
- java工程开发之图形化界面之(第五课)
下面我们将: 一)更加完整的解释Graphics类 二)使用方法来更清晰的重新编写前面图形小应用程序之一 三)介绍一些其他的绘图的方法 四)介绍方法init,它是类似于paint但是用于不同用途的另一 ...
- MQ日常维护操作手册
假设队列管理器为QMgrName,以下所有使用QMgrName的地方您都可以替换成您维护的mq队列管理器名称. 一.MQ的启动与停止 用root用户启/停需要root用户包含在mqm组中. 1.MQ的 ...
- FFmpeg的Android平台移植—编译篇
摘要:本文主要介绍将FFmpeg音视频编解码库移植到Android平台上的编译和基本测试过程. 环境准备: ubuntu-12.04.5 android-ndk64-r10-linux-x86_64. ...
- java sni support result in svn fail
svn: E175002: handshake alert: unrecognized_name http://stackoverflow.com/questions/7615645/ssl-han ...
- Android中监听webview监听是否加载完成
之前写过一篇捕获Phoengap的webview事件的方法,主要是在实现了CordovaInterface的Activity中, 在onMessage中根据第一个参数的message name来判断 ...
- 转:sqlplus与shell互相传值的几种情况
sqlplus与shell互相传值的几种情况 情况一:在shell中最简单的调用sqlplus $cat test.sh #!/bin/sh sqlplus oracle/oracle@oracle& ...
- 使用jquery模拟键盘事件,但window系统并不会真的响应事件,只是浏览器当前页面会响应而已
<!DOCTYPE html> <html> <head> <title>Demo</title> <meta http-equiv= ...