首页 > 代码库 > 设计模式入门之迭代器模式Iterator
设计模式入门之迭代器模式Iterator
迭代器模式定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部实现
迭代器模式的结构和说明
Iterator::迭代器接口。定义访问和遍历元素的接口
ConcreteIterator:具体的迭代器实现对象。实现对聚合对象的遍历,并跟踪遍历时的当前位置
Aggregate:聚合对象。定义创建相应迭代器对象的接口
ConcreteAggregate:具体聚合对象。实现创建相应的迭代器对象
实例:一个公司,工资列表是用List实现的,后收购一家公司,工资列表是用Array实现的,现在需要开发一种统一的方式来访问两种不同的聚合对象,上代码
//工资描述模型对象 public class PayModel { private String userName; private double pay; //get and set methods } //获取访问聚合接口的接口 public interface Aggregate { public Iterator createIterator(); public int size(); public Object get(int index); } //已有的工资管理对象 public class PayManager implements Aggregate{ public Iterator createIterator() { return new AgIteratorImpl((Aggregate)this); } private List list = new ArrayList(); public List getPayList() { return list; } public void calcPay() { PayModel pm1 = new PayModel(); pm1.setPay(3800); pm1.setUserName("张三"); PayModel pm2 = new PayModel(); pm2.setPay(5800); pm2.setUserName("李四"); list.add(pm1); list.add(pm2); } public Object get(int index) { Object obj = null; if(index < this.list.size()) { obj = this.list.get(index); } return obj; } public int size() { return this.list.size(); } } //被收购放的工资管理类 public class SalaryManager implements Aggregate { public Iterator createIterator() { return new AgIteratorImpl((Aggregate)this); } private PayModel[] pms = null; public PayModel[] getPays() { return pms; } public void calcSalary() { PayModel pm1 = new PayModel(); pm1.setPay(2800); pm1.setUserName("王五"); PayModel pm2 = new PayModel(); pm2.setPay(6800); pm2.setUserName("赵六"); pms = new PayModel[2]; pms[0] = pm1; pms[1] = pm2; } public Object get(int index) { Object obj = null; if(index < this.pms.length) { obj = this.pms[index]; } return obj; } public int size() { return this.pms.length; } } //统一访问聚合对象的接口 public interface Iterator { public void first(); public void next(); public boolean isDone(); public Object currentItem(); } //访问数组的统一迭代接口 public class AgIteratorImpl implements Iterator{ private Aggregate aggregate = null; private int index = -1; public AgIteratorImpl(Aggregate aggregate) { this.aggregate = aggregate; } public void first() { index = 0; } public void next() { if(index < this.aggregate.size()) { index = index + 1; } } public boolean isDone() { if(index == this.aggregate.size()) { return true; } return false; } public Object currentItem() { return this.aggregate.get(index); } } //客户端调用 public class Client { public static void main(String[] args) { PayManager payManager = new PayManager(); payManager.calcPay(); System.out.println("集团工资列表:"); test(payManager.createIterator()); SalaryManager salaryManager = new SalaryManager(); salaryManager.calcSalary(); System.out.println("新收购公司工资列表:"); test(salaryManager.createIterator()); } private static void test(Iterator it) { it.first(); while(!it.isDone()) { Object obj = it.currentItem(); System.out.println("the obj="+obj); it.next(); } } } //以上并没有使用Java自带的Iterator,这样可以更好地理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。