工厂模式很好用,为表诚意,我直接搞个实用的例子放这,解析一个订单的数据,并且这个订单里面可能不止一件商品的做法。

  还是直接上代码,不懂的地方,再提出来。

  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开发——工厂模式的更多相关文章

  1. iOS开发-工厂模式

    工厂模式算是开发中比较常见的设计模式,简单工厂模式,工厂模式和抽象工厂模式,都属于工厂模式.简单工厂模式(simple factory)是类的创建模式,静态工厂方法(static factory me ...

  2. iOS 抽象工厂模式

    iOS 抽象工厂模式 什么是抽象工厂模式 简单了解一下 按照惯例,我们先了解一下什么是抽象工厂模式.抽象工厂模式和工厂方法模式很相似,但是抽象工厂模式将抽象发挥的更加极致,是三种工厂模式中最抽象的一种 ...

  3. iOS 简单工厂模式

    iOS 简单工厂模式 什么是简单工厂模式? 简单工厂模式中定义一个抽象类,抽象类中声明公共的特征及属性,抽象子类继承自抽象类,去实现具体的操作.工厂类根据外界需求,在工厂类中创建对应的抽象子类实例并传 ...

  4. iOS开发-代理模式

    代理模式有的时候也被称之为委托模式,但是实际上两者是有分别的,代理模式为另一个对象提供一个替身或占位符访问这个对象,代理对象和控制访问对象属于同一类,委托对象和对象不一定属于同一类.两者都可以控制类的 ...

  5. iOS开发-策略模式

    策略(Strategy)模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.策略模式是对算法的包装,是把使用算法的责任和算法本身分割开 ...

  6. iOS开发-模板方法模式

    模板方法模式定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤.模板方法模式是由子类决定实现算法中的步骤,工厂方法由子类决定实现哪一 ...

  7. iOS开发-命令模式

    命令模式算是设计模式中比较简单的,最常见的例子是工作任务安排下来进行编程,如果工作任务不需要完成,我们可以取消我们之前完成的代码,也可以理解为回滚撤销操作.这里面涉及到命令模式中的两个对象,一个是动作 ...

  8. iOS开发-状态模式

    状态模式允许对象内部状态改变时改变它的行为,对象看起来好像修改了它的类.状态模式看起来和策略模式比较相像,策略模式是将可以互换的行为封装起来,然后通过使用委托的方式,决定使用哪一个行为,状态也是封装行 ...

  9. iOS开发-迭代器模式

    迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示.开发过程中,我们可能需要针对不同的需求,可能需要以不同的方式来遍历整个整合对象,但是我们不希望 ...

随机推荐

  1. HTML5编程之旅系列一:HTML5 Geolocation 初探

    让我们假设这样一个场景,有一个web应用程序,它可以向用户提供附近不远处某商场的打折优惠信息.使用HTML5 Geolocation API(地理定位 API),可以请求用户共享他们的位置信息. HT ...

  2. POJ - 3666 Making the Grade(dp+离散化)

    Description A straight dirt road connects two fields on FJ's farm, but it changes elevation more tha ...

  3. dfs和bfs的简单总结

    首先是dfs,又名深度优先搜索.看名字就知道,它的核心思想就是一直搜索,先在一条路上面一路撸到底,如果到底没有办法前进了,那么判断是否到达终点,如果没有到达,那么就回溯到之前的点再撸. dfs的要点: ...

  4. HTTP状态码 - HTTP Status Code

    HTTP Status Code 常见的状态码: HTTP: Status 200 – 服务器成功返回网页HTTP: Status 404 – 请求的网页不存在HTTP: Status 503 – 服 ...

  5. android studio没有浮现函数用法和属性说明?

    最近转用android studio,在使用eclipse和android studio时原本在鼠标停留处或智能提示能浮现文档相关内容,但我的是一直显示Fetching Documentation…… ...

  6. Service Activity三种交互方式

    Service Activity三种交互方式 2012-09-09 22:52 4013人阅读 评论(2) 收藏 举报 serviceandroidimportclassthreadjava     ...

  7. HaiHongOJ 1003 God Wang

    题目连接:http://oj.haihongblog.com/problem.php?id=1003 线段树维护区间最小值,并且求解下标 #include <stdio.h> #inclu ...

  8. sql server 日期转换函数 convert()

    --内容来自:http://hi.baidu.com/muqingz/item/8fb7b3ca8a485b0cac092f7b Select CONVERT(varchar(100), GETDAT ...

  9. DataGridView很详细的用法

    DataGridiew用法总结 一.DataGridView 取得或者修改当前单元格的内容: 当前单元格指的是 DataGridView 焦点所在的单元格,它可以通过 DataGridView 对象的 ...

  10. 给ThinkPHP5增加验证码功能

    就在这几天,TP5进行的RC3的大规模更新,虽然我们都狠狠地骂了一百遍,但是我的内心是无比的激动,TP终于走上了"上流社会"的模式:composer! 为什么说composer是上 ...