迭代器模式
2016-01-08 14:06
141 查看
今天的计划:
13:00 ~ 21:00 工作 + 更新BitCasual;
21:00 ~ 22:00 运动;
BitCasual更新计划:
1.重构Lua代码;
2.游戏界面的Label更行;
3.8 x 8改成6 x 6;
4.去掉比较难度比较高的块;
Jason Ding代码的坏味道:8 Data Clumps(数据泥团)
数据项就像是小孩子,喜欢成群结对地待在一块儿。你常常可以在很多地方看到相同的三四项数据:
两个类中相同的字段,许多函数签名中相同的参数。 这些都是绑在一起出现的数据真应该拥有属于他们自己的对象。首先请找出这些数据以字段形式出现的地方。
首先请找出这些数据以字段形式出现的地方,运用Extract Class 将它们提炼到一个独立对象中。
然后将注意力转移到函数签名上,运用Introduce Parameter Object(引入参数对象) 或 Preserve Whole Object(保持对象完整) 为它减肥。
这么做直接好处是可以将很多参数列缩短,简化函数调用。是的,不必在意Data Clumps 只用上新对象的一部分字段,只要以新对象取代两个(或者更多)字段,你就值回票价了。
一个好的批判办法是: 删除众多数据中的一项。这么做,其他数据有没有因而失去意义? 如果它们不在有意义,这就是明确信号:你应该为它们产生一个新对象。
减少字段和参数的个数, 当然可以去除一些坏味道, 但更重要的是: 一旦拥有新对象, 你就有机会让程序散发出一种芳香。得到新对象后, 你就可以着手寻找Feature Envy, 这个可以帮助你指出能够移至新类中的种种程序行为. 不必太久, 所有的类都将再它们的小小社会中充分发挥价值。
附上链接8
Data Clumps(数据泥团)
![](http://liangxiegame.com/content/images/2016/01/-----2016-01-08---1-03-47.png)
什么时候用?
1.需要访问组合对象的内容,而又不暴露其内部表示。
2.需要通过多种方式遍历组合对象。
3.需要提供一个统一的接口,用来遍历各种类型的组合对象。
Cocoa Touch中的迭代器模式:
最常见的:快速枚举
通过NSEnumerator实现:
基于块的枚举:
转载请注明地址:独立日记
微信公众号:QWERTeam
13:00 ~ 21:00 工作 + 更新BitCasual;
21:00 ~ 22:00 运动;
BitCasual更新计划:
1.重构Lua代码;
2.游戏界面的Label更行;
3.8 x 8改成6 x 6;
4.去掉比较难度比较高的块;
Jason Ding代码的坏味道:8 Data Clumps(数据泥团)
数据项就像是小孩子,喜欢成群结对地待在一块儿。你常常可以在很多地方看到相同的三四项数据:两个类中相同的字段,许多函数签名中相同的参数。 这些都是绑在一起出现的数据真应该拥有属于他们自己的对象。首先请找出这些数据以字段形式出现的地方。
首先请找出这些数据以字段形式出现的地方,运用Extract Class 将它们提炼到一个独立对象中。
然后将注意力转移到函数签名上,运用Introduce Parameter Object(引入参数对象) 或 Preserve Whole Object(保持对象完整) 为它减肥。
这么做直接好处是可以将很多参数列缩短,简化函数调用。是的,不必在意Data Clumps 只用上新对象的一部分字段,只要以新对象取代两个(或者更多)字段,你就值回票价了。
一个好的批判办法是: 删除众多数据中的一项。这么做,其他数据有没有因而失去意义? 如果它们不在有意义,这就是明确信号:你应该为它们产生一个新对象。
减少字段和参数的个数, 当然可以去除一些坏味道, 但更重要的是: 一旦拥有新对象, 你就有机会让程序散发出一种芳香。得到新对象后, 你就可以着手寻找Feature Envy, 这个可以帮助你指出能够移至新类中的种种程序行为. 不必太久, 所有的类都将再它们的小小社会中充分发挥价值。
附上链接8
Data Clumps(数据泥团)
写给女票的:
迭代器:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。![](http://liangxiegame.com/content/images/2016/01/-----2016-01-08---1-03-47.png)
什么时候用?
1.需要访问组合对象的内容,而又不暴露其内部表示。
2.需要通过多种方式遍历组合对象。
3.需要提供一个统一的接口,用来遍历各种类型的组合对象。
Cocoa Touch中的迭代器模式:
最常见的:快速枚举
NSArray *anArray = ...; for (NSString * item in anArray) { // 对item做些处理 }
通过NSEnumerator实现:
NSArray *anArray = ... ; NSEnumerator *itemEnumerator = [anArray objectEnumerator]; NSString *item; while (item = [itemEnumerator nextObject]) { // 对item做些处理 }
基于块的枚举:
NSArray *anArray = [NSArray arrayWithObjects:@"This",@"is",@"a",@"test",nil]; NSString *string = @"test"; [anArray enumerateObjectsUsingBlock:^(id obj,NSUInteger index,BOOL *stop) { if ([obj localizedCaseInsensitiveCompare:string] == NSOrdererdSame) { // 对返回的obj做点别的事情 *stop = YES; } } ];
转载请注明地址:独立日记
微信公众号:QWERTeam
![](http://liangxiegame.com/content/images/2015/12/qrcode_for_gh_274c473a11b5_430--1-.jpg)
相关文章推荐
- 经典算法的Python实现(2)
- 单例模式
- NOI2015.品酒大会(后缀数组)
- IDEA中GITHUB配置
- Hibernate向MySQL插入中文数据--乱码解决
- 互联网打赏
- Java-代碼混淆编译器
- lwIP(V1.3.0)RAW_API译文
- 搭建Hadoop源代码阅读环境
- 从头认识java-17.2 基本的线程机制(1)-初识多线程-2
- 自己发现写博客是很好整理自己知识点的好方法
- oc之可变字典创建 添加 删除 遍历
- linux中字符串转换函数 simple_strtoul
- 187,使用手势控制图片的缩放
- 从零开始nodejs系列文章-nodejs到底能干什么
- Java EE V7.0学习笔记-JBoss Tools 4.2.3.Final配套的WildFly版本为8.x
- 理解Java虚拟机体系结构
- 一步一步安装hadoop1.2.1
- 访问win7的d$这种默认共享时拒绝访问
- VS集成Qt环境搭建