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),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示.开发过程中,我们可能需要针对不同的需求,可能需要以不同的方式来遍历整个整合对象,但是我们不希望 ...
随机推荐
- List、Set、Map集合存放null解析及HashMap、Hashtable异同点解析
1.List.Set.Map集合存放null解析: @Test public void CollectionTest() { // 测试List List<Object> list = n ...
- mysql中的substr()函数
mysql中的substr()函数和hibernate的substr()参数都一样,就是含义有所不同. 用法: substr(string string,num start,num length); ...
- Loadrunner之脚本的调试和保存(六)
一.调试脚本 脚本录制完毕后,按F5键或单击菜单上的RUN按钮,可以运行脚本. 在VIRTUAL USER GENERATOR中运行脚本的作用,主要是查看录制的脚本能否正常通过,如果有问题 ...
- Listview多条目展示
//---------------主要是适配器里面------------------------------------- package com.bwie.test.adapter;import ...
- [转]慎用InputStream的read()方法
InputStream 此抽象类是表示字节输入流的所有类的超类. 我们从输入流中读取数据最常用的方法基本上就是如下 3 个 read() 方法了: 1 . read () 方法,这个方法 从输入流中读 ...
- 6-SUPER关键字
(1)强行调用父类方法的执行(2)super不一定在重写中使用,也可以表示那些方法是从父类中继承而来的.
- php的header函数之设置content-type
//定义编码 header( 'Content-Type:text/html;charset=utf-8 '); //Atom header('Content-type: application/at ...
- Genymotion开启就全部白屏解决方法
Genymotion开启就整个界面全部白屏,包括菜单栏也白屏,解决方法: 很可能是显卡驱动有问题,用驱动人生或者驱动精灵更新显卡驱动就可以了. 目前开发者好用的模拟器有: 1.Genymotion 2 ...
- 关于自定义jar包(tomcat)的添加
1 鼠标右击工程 选择 properties 或者 Ait + Enter 2 选择Libraries 3 点击Add Library... 4 选择User Library 点击 Next 5 如 ...
- a href="javascript:void(0)" 是什么意思?加不加上有什么区别?
<A href="javascript:void(0)">点击</a>点击链接后不会回到网页顶部<A href="#">点击 ...