您的位置:首页 > 其它

迭代器模式

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(数据泥团)

写给女票的:

  迭代器:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。



什么时候用?


  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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: