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),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示.开发过程中,我们可能需要针对不同的需求,可能需要以不同的方式来遍历整个整合对象,但是我们不希望 ...
随机推荐
- NSIndexPath 延伸
转载自:http://my.oschina.net/u/2560887/blog/602095?fromerr=Dy4vj5Jd 这个类的实例描述了一个嵌套数组中特定节点的路径,一般叫做索引路径.1. ...
- overflow:hidden
超出之后隐藏,比如有一个div,高度和宽度都是100像素,当里面的内容很多,div里撑不下时,如果设置overflow:hidden,就会把超出的内容隐藏掉不显示
- elasticsearch 手动控制分片分布
elasticsearch可以通过reroute api来手动进行索引分片的分配. 不过要想完全手动,必须先把cluster.routing.allocation.disable_allocatio ...
- 基于VirtualBox 安装和配置Fuel OpenStack(V6.1)
1.环境准备 准备一台内存较大的主机,12G以上 下载安装VirtualBox及其匹配的扩展包 virtualbox: http://download.virtualbox.org/virtualbo ...
- android webview处理下载内容
url = "http://m.mumayi.com/"; WebView = (WebView) findViewById(R.id.webView1); WebView.get ...
- UVALive 6885 Flowery Trails
两次SPFA #include<cstdio> #include<cstring> #include<cmath> #include<vector> # ...
- Git 使用初体验
http://my.oschina.net/moooofly/blog/228608 很久之前在 http://git.oschina.net/ 上创建了一个私有项目 modb ,目的主要是用来学习如 ...
- php源码分析之php_info输出中css样式是怎么来的
我们经常使用echo phpinfo();查看php的配置信息,但是大家知道里面的css样式是怎么来的吗? 我们查看源码(php源码/ext/standard/css.c) PHPAPI void p ...
- 集合问题 离线+并查集 HDU 3938
题目大意:给你n个点,m条边,q个询问,每条边有一个val,每次询问也询问一个val,定义:这样条件的两个点(u,v),使得u->v的的价值就是所有的通路中的的最长的边最短.问满足这样的点对有几 ...
- zf-关于注册码全部错误的解决方法
之所以错误,是因为这里的用户名称是石首市政务服务中心. 在数据库里把这个字段改成 上海卓繁 就可以了 一般都是在 SYS_INFO 这张表里面改