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),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示.开发过程中,我们可能需要针对不同的需求,可能需要以不同的方式来遍历整个整合对象,但是我们不希望 ...
随机推荐
- Learning Java IO indexes
I/O Streams, it simplifies I/O operations, write a whole object out to stream & read back. File ...
- html base1
标题: 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的. <h1> 定义最大的标题.<h6> 定义最小的标题. 段落: < ...
- 笔记整理--Linux平台MYSQL的C语言
Linux平台MYSQL的C语言API全列表 - 第三只眼的专栏 - 博客频道 - CSDN.NET - Google Chrome (2013/8/18 22:28:58) Linux平台MYS ...
- .NET 4.0里异常处理的新机制
非原创,转载自: http://www.cnblogs.com/killmyday/archive/2010/09/05/1818533.html .NET里不能捕捉(catch)到一些异常了,而 ...
- Linux 监控文件事件
某些应用程序需要对文件或者目录进行监控,来侦测其是否发生了某些事件.Linux很贴心的为我们提供了inotify API,也是Linux的专有. inotify API 在使用之前一定要有一个inot ...
- jq中的css-Dom
1,height() ,width() 此方法用来获取匹配元素的高和宽的值,如果括号内有值,则是修改匹配元素的值, 2.offset() 此方法的作用是获取元素在当前视窗的相对偏移,其中返回的对象包含 ...
- git 使用系列(一)—— git stash 的使用
1. git 放弃本地修改 git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面.可用git stash p ...
- Redis hash 类型及操作
原文:http://blog.sina.com.cn/s/blog_5f044a4d0102v01k.html Redis hash是一个string类型的field和value的映射表.它的添加.删 ...
- ibus用上搜狗拼音词库
1.下载搜狗拼音词库 wget http://hslinuxextra.googlecode.com/files/sougou-phrases-full.7z 2.用sougou-phrases-fu ...
- RPC远程过程调用机制底层原理