迭代器模式定义:它提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。
迭代器模式就是为解决遍历容器中的元素而诞生的。
举个栗子:我这有些水果,香蕉,荔枝,榴莲啊[流口水],一个手拿不下啊,于是就放在一个大篮子里,到家后,我又一个个拿出来了.[我好无聊噢]
代码清单-1 水果抽象类
/** * 水果抽象类 */ public abstract class Fruits { //水果名称 private String name = null; public Fruits(String name) { this.name = name; } protected String getName() { return name; } //子类实现打印水果方法 public abstract void printName(); }
代码清单-2 香蕉和荔枝
/** * 香蕉 */ public class Banana extends Fruits { //价格 private String price = null; public Banana(String name,String price) { super(name); this.price = price; } @Override public void printName() { System.out.println(getName()+":"+price); } } /** * 荔枝 */ public class Litchi extends Fruits{ //价格 private String price = null; public Litchi(String name, String price) { super(name); this.price = price; } @Override public void printName() { System.out.println(getName()+":"+price); } }
代码清单-3 水果迭代器接口
/** * 水果迭代器 */ public interface FruitsIterator<T>{ //是否有下一个元素 boolean hashNext(); //返回下一个元素 <T> T next(); }
代码清单-4 迭代器实现类
/** * 水果迭代器实现类 * @param <T> */ public class FruitsIteratorImpl<T> implements FruitsIterator { private List<T> fruits = null; //容器内指向当前元素的游标 private int currentItem = 0 ; public FruitsIteratorImpl(List<T> fruits) { this.fruits = fruits; } public boolean hashNext() { boolean rs = true; if(fruits == null || currentItem >= fruits.size() || fruits.get(currentItem) == null ){ rs = false; } return rs; } public T next() { return fruits.get(currentItem++); } }
代码清单-5 水果篮子 -容器类
/** * 水果篮子 * @param <T> */ public class FruitsBasket<T> { private List fruits = new ArrayList(); //返回篮子的水果迭代器 public FruitsIterator getFruitsIterator(){ return new FruitsIteratorImpl(fruits); } //往篮子里放水果 public <T> void add(T t){ fruits.add(t); } }
代码清单-6 场景类
public class Client { public static void main(String[] args) { Fruits banana = new Banana("香蕉","0.8元/斤"); Fruits litchi = new Litchi("荔枝","18元/斤"); FruitsBasket<Fruits> basket = new FruitsBasket<Fruits>(); basket.add(banana); basket.add(litchi); FruitsIterator<Fruits> fruitsIterator = basket.getFruitsIterator(); //遍历 while (fruitsIterator.hashNext()){ Fruits fruits = fruitsIterator.next(); fruits.printName(); } } }
执行结果
香蕉:0.8元/斤 荔枝:18元/斤
原文:http://www.cnblogs.com/taoyong/p/5652007.html