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

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

  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. java vector 和ArrayList的区别

    相同点: 1.都是使用数组存储数据 不同点: 1.Vector是显示安全的,ArrayList是线程不安全的 Vector部分代码: public synchronized boolean add(E ...

  2. 第一章C语言简介及输出函数 上机部分

    第一章C语言简介及输出函数 上机1 #include "stdio.h" void main() { printf("南方学院,你好!\n"); printf( ...

  3. javascript语句语义大全(7)

    1. 事件 onmousedown——鼠标按下事件 当鼠标按下的时候触发,根据鼠标不同的按键会有不同的值传入,左键0,滚轮1,右键2,不同浏览器可能有不同. onmousemove——当鼠标移动的时候 ...

  4. acm课程练习2--1013(同1014)

    题目描述 There is a strange lift.The lift can stop can at every floor as you want, and there is a number ...

  5. Django -- Views and URLconf

    1 创建工程 django-admin startproject mysite && cd mysite 2 创建应用 python manage.py startapp blog 3 ...

  6. Git学习 -- 管理修改

    git关注的是修改,而不是文件 commit只会提交add到暂存区的修改 撤销修改 已修改但没有add到暂存区 git checkout -- <file>     #撤销工作区中的修改 ...

  7. C# devExpress GridControl 统计行总数

    dev我不怎么会用,边学边记: 如果要在gridControl 页面底部统计记录总数只需两步: 1:设置显示gridControl页脚 2,.设置统计列: DevExpress.XtraGrid.Co ...

  8. 使用Word API打开Word文档 ASP.NET编程中常用到的27个函数集

    使用Word API(非Openxml)打开Word文档简单示例(必须安装Word) 首先需要引入参照Microsoft.Office.Interop.Word 代码示例如下: public void ...

  9. TCP 连接中的TIME_WAIT

    原文:http://blog.csdn.net/wangpengqi/article/details/17245349 这就有个细节,一次http请求,谁会先断开TCP连接?什么情况下客户端先断,什么 ...

  10. 2016大连网络赛 Football Games

    Football Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) P ...