一天一个设计模式 - Iterator
程序员文章站
2024-02-23 15:10:28
...
Iterator 模式
Iterator 模式粗暴地理解就是一个个遍历。先看栗子:
int length = arr.length;
for(int i = 0; i < length; i++) {
System.out.println(arr[i)
}
程序中我们经常用到这样的循环,实现从头到尾的遍历工作。
如果我们将这其中的 i 进行抽象化,在设计模式中就叫做 Iterator 模式,俗称迭代器。
用这种设计模式,我们自己实现一个把商品放置到货架上,并把商品名称按照排列顺序打印出来的小栗子。
这里关于货架和商品类的定义就不再赘述,直接看主程序:
public class Main {
public static void main(String[] args) {
// 我们有一个长度为4的货架
ProductShelf productShelf = new ProductShelf(4);
// 上面摆满了老奶奶的各种稀奇古怪的商品
productShelf.putProduct("橡皮擦");
productShelf.putProduct("作业本");
productShelf.putProduct("火锅底料");// wtf???
productShelf.putProduct("耳机");
// ProductShelf 引入了 Iterator
Iterator it = productShelf.iterator();
// 我们从老奶奶的货架上一个一个来看商品名称
while(it.hasNext()) {
Product product = (Product)it.next();
System.out.println(product.getName());
}
}
}
Demo 代码可以参考 https://github.com/MrNullPoint/IteratorExample
解惑
为什么要用 Iterator ,不直接用 for 循环遍历呢?
引入 Iterator 之后可以将遍历和实现分开,看刚才的 while 循环,我们并没有调用 ProductShelf 中的任何方法,在循环过程中,我们不依赖 ProductShelf 的实现。也就是说不管编写 ProductShelf 的是谁,我们都能拿过来就能遍历,管它是怎么存储 Product,使用 List 还是 Vector 或者其他什么的,对于开发者来说非常方便。
迭代器只能从前往后遍历?
不是的,我们可以根据需要自己编写 Iterator ,让它从后往前,指定下标或者任何你需要的方式。
下一篇: 常用的bundles清单
推荐阅读
-
一天一个设计模式 - Iterator
-
一天一个设计模式 - Adapter
-
使用文件模板和向导创建一个类型文件 博客分类: NetBeans SwingUINetbeansIDE设计模式
-
这是一个负载平衡的艺术 博客分类: 组织模式 游戏设计模式.net
-
这是一个负载平衡的艺术 博客分类: 组织模式 游戏设计模式.net
-
js设计模式----Behavioral Patterns之Iterator(4)
-
JS设计模式之迭代器模式(Iterator)
-
【Danny hui】运用抽象工厂模式自己动手写一个IoC 博客分类: 专家文章翻译 IOC设计模式单元测试Spring编程
-
结构型设计模式之桥接模式实验--开发一个跨平台视频播放器
-
【通俗易懂】一天一个设计模式----工厂模式