PS:学了迭代器模式,就知道java的集合框架中迭代器访问的原理,原来我以前想的太复杂了。
设计模式:迭代器模式
- 迭代器模式简介:
- 简介:顺序访问集合对象的元素,不需要知道集合对象的底层表示。
- 意图:提供一种方法顺序访问一个聚合对象中各个元素,而又无须暴露该对象的内部表示。
- 主要解决:不同的方式来遍历整个整合对象。
- 使用场景:
- 访问一个聚合对象的内容而无需暴露它的内部表示。
- 需要为聚合对象提供多种遍历方式
- 遍历不同的聚合结构提供一个统一的接口。
- 迭代器模式成分
- Iterator 接口: hashNext ,和next方法
- Container接口:定义getIterator() 方法;
- 包含顺序结构的聚合类,并且实现Container,包含内部类 实现Iterator接口。
- 迭代器模式优缺点:
- 优点:
- 它支持以不同的方式遍历一个聚合对象
- 迭代器简化了聚合类
- 在同一个聚合上可以有多个遍历
- 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无需修改原有代码。
- 缺点:
- 由于迭代器模式将存储数据和遍历数据的职责分开,增加新的聚合类需要对应增加新的迭代器类。类的个数成对增加,这在一定程度上增加了系统的复杂性。
- 优点:
- 迭代器模式实现:
- Iterator JIE口
package com.fg.java.iterator; public interface Iterator { public boolean hashnext(); public Object next(); }
- Container接口
package com.fg.java.iterator; public interface Container { public Iterator getIterator(); }
- 聚合类:
package com.fg.java.iterator; public class NameResitory implements Container{ public String names [] = {"Robert","John","Julie","Lora"}; public Iterator getIterator() { return new NameIterator(); } private class NameIterator implements Iterator{ int index; public boolean hashnext() { if(index <names.length){ return true; } return false; } public Object next() { if(this.hashnext()){ return names[index++]; } return null; } } }
- Demo
package com.fg.java.iterator; public class IteratorDemo { public static void main(String args []){ NameResitory nameResitory = new NameResitory(); for(Iterator iterator = nameResitory.getIterator();iterator.hashnext();){ String name = (String)iterator.next(); System.out.println("name"+name); } } }
- Iterator JIE口