Jim*_*ing 5 java design-patterns
我听说过人们应该总是使用Iterator模式来控制循环,而不是抛出异常(这是在Python迭代器中完成的方式)或使用Sentinel模式,从而返回一个特殊的,哨兵值(通常null)表示迭代的结束.
最佳做法是否建议不要使用哨兵模式?如果是这样,为什么?(除了它不使用foreachJava 1.5中的语法).
编辑:代码示例1 - Sentinel模式
Reader r = ...;
for( int val = r.read(); val != -1; val = r.read()) {
doSomethingWith(val);
}
Run Code Online (Sandbox Code Playgroud)
代码示例2 - 迭代器模式
for(Iterator<Thing> it = getAnIterator() ; it.hasNext(); ) {
Thing t = it.next();
doSomethingWith(t);
}
Run Code Online (Sandbox Code Playgroud)
Pau*_*ier 15
Sentinel模式的问题在于它明确地从作为有效元素的值集中排除了sentinel值.即,如果您有一个可以有效地包含null作为元素的对象列表,则使用null作为标记值是失败的.
例外情况只应用于"例外"情况.结束或打破循环是正常的程序流程,而不是特殊情况.
此外,在使用Java(或任何语言)工作时,您希望使用社区中常见且众所周知的模式和约定,因为其他Java程序员可能需要维护您的代码.如果他们这样做,他们很可能会期望看到迭代器,而不是哨兵模式.
| 归档时间: |
|
| 查看次数: |
1299 次 |
| 最近记录: |