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

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

  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. 利用BFS求最短路

    利用BFS求图的最短路, POJ3984 #define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<string.h& ...

  2. 获取spring bean的utils

    <span style="font-size:10px;">package com.record.util; import org.springframework.be ...

  3. Nape实现坐标旋转角度回弹

    乒乓球以一个向量运动,碰到障碍后反弹以一个新的向量运动,如下图: 要实现回弹只需要求出向量v1,把向量v0取反,再旋转(a+b)度就可以得到向量v1. 向量取反: var v:vec2 = new V ...

  4. JNDI深入浅出

    1.什么是JNDI JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和 ...

  5. wordpress安装插件--su

     Add to Any: Subscribe Button 让读者方便的订阅你的博客到任何Feed阅读器 Google XML Sitemaps 生成完全兼容各大搜索引擎的Sitemaps/网站地图. ...

  6. Redis(1)在windows环境下的安装和测试

    初次准备使用redis,一个著名的nosql缓存数据库. 这里是第一天,就简单写一下windows下的安装,遇到的一些问题,然后简单的使用和测试,之后会在代码中使用和测试. 之后还会在生产环境中进行测 ...

  7. (三)、Struts第三天

    (三).Struts第三天 Struts核心业务: (Struts提供了哪些功能?) 1.  请求数据自动封装(params拦截器) 2.  struts数据处理方式 * ActionContext ...

  8. location对象的属性和方法应用(解析URL)

    本文将与大家分享下location对象使用属性和方法来解析URL的实例,感兴趣的朋友可以参考下,希望对你有所帮助   location对象提供了很多属性和方法用来解析URL. 复制代码代码如下: &l ...

  9. struts2语法--error页面如何捕获?

    如果地址栏输入了不带后缀或者action为后缀, 不存在的页面跳转到error.jsp: struts.xml配置" <package name="default" ...

  10. java输出日期时间

    Calendar类下方法 c.add(Calendar.YEAR,4);//加4年 c.add(Calendar.MONTH,-1);// 月份减1 c.set(2012,2,23); //把时间设置 ...