迭代器模式
1.定义
提供一种方法,顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。
2.示例代码
使用迭代器模式,遍历数组和链表两个聚合对象。
/*工资模型描述对象*/ public class PayModel{ //员工姓名 private String userName; //支付工资 private double pay; public String getUserName(){ return userName; } public void setUserName(String userName){ this.userName = userName; } public double getPay(){ return pay; } public void setPay(double pay){ this.pay = pay; } } /*统一访问聚合的接口*/ public interface Iterator{ public void first(); public void next(); public boolean isDone(); public Object currentItem(); } /*获取访问聚合对象的接口*/ pubic abstract class Aggregate{ /*工厂方法,创建相应的迭代器对象接口*/ pubic abstract Iterator createIterator(); }
/*子公司1的工资管理,内部通过array管理*/ public class SalaryManager extends Aggregate{ //返回聚合对象迭代器 public Iterator createIterator(){ return new ArrayIteratorImpl(this); } public Object get(int index){ Object retObj = null; if(index < pms.length){ retObj = pms[index]; } return retObj; } public int size(){ return this.list.length; } //聚合对象为数组 private PayModel[] pms = null; //获取工资列表 public PayModel[] getPays(){ return pms; } //计算工资 public void calcSalary(){ PayModel pm1 = new PayModel(); pm1.setPay(3800); pm1.setUserName("张三"); PayModel pm2 = new PayModel(); pm2.setPay(3600); pm2.setUserName("李四"); pms = new PayModel[2]; pms[0] = pm1; pms[1] = pm2; } } /*用来实现数组访问的迭代接口*/ public class ArrayIteratorImpl implements Iterator{ /*存放被迭代的聚合对象*/ private SalaryManager aggregate = null; //当前记录的索引 private int index = -1; public ArrayIteratorImpl(SalaryManager aggregate){ this.aggregate = aggregate; } public void first(){ index = 0; } public void next(){ if(next < 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); } } /*子公司2的工资管理,内部通过list管理*/ public class PayManager extends Aggregate{ //返回聚合对象迭代器 public Iterator createIterator(){ return new CollectionIteratorImpl(this); } public Object get(int index){ Object retObj = null; if(index < this.list.size()){ retObj = this.list.get(index); } return retObj; } public int size(){ return this.list.size(); } //聚合对象为java的集合对象 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(3600); pm2.setUserName("李四"); list.add(pm1); list.add(pm2); } } /*用来实现链表访问的迭代接口*/ public class CollectionIteratorImpl implements Iterator{ /*存放被迭代的聚合对象*/ private PayManager aggregate = null; //当前记录的索引 private int index = -1; public CollectionIteratorImpl(PayManager aggregate){ this.aggregate = aggregate; } public void first(){ index = 0; } public void next(){ if(next < 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[]){ //访问子公司1的工资列表 SalaryManager salaryManager = new SalaryManager(); salaryManager.calcSalary(); System.out.println("子公司1的工资列表:"); test(salaryManager.createIterator()); //访问子公司2的工资列表 PayManager payManager = new PayManager(); payManager.calcSalary(); System.out.println("子公司2的工资列表:"); test(payManager.createIterator()); } /*通过迭代器访问*/ private static void test(Iterator it){ it.first(); while(!it.isDone()){ Object obj = it.currentItem(); System.out.println("this ojb = " + obj); it.next(); } } }
3.实际应用
迭代器模式的功能主要用于提供对集合对象的迭代访问,就是围绕这个“访问”做文章,延伸出很多功能,比如以不同的方式遍历集合对象、对同一个对象同时进行多个遍历、以不同的遍历策略来遍历集合,如是否需要过滤、多态迭代,上边的实例已经实现了多态迭代。
迭代器模式的本质:控制访问集合对象中的元素
相关推荐
设计模式--迭代器模式java例子
java设计模式--迭代器模式,理解这个例子就完全理解迭代器啦
博文“设计模式之--迭代器模式”附属源码,以供参考。
JAVA-设计模式-行为型模式-迭代器模式
PPT内容包括:内附代码,...设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。
设计模式-迭代器模式(讲解及其实现代码)
java常用设计模式-迭代器模式
迭代器模式(Iterator Pattern)是一种非常常用的设计模式,这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。 介绍 意图: 提供一种方法顺序访问一个聚合对象中各个...
c++设计模式-行为型模式-迭代器模式;qt工程;c++简单源码;迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
ios平台下迭代器模式最初简代码讲解何为迭代器模式,相关博客http://blog.sina.com.cn/s/blog_161d504630102wxis.html
设计模式专题之(二十三)迭代器模式---设计模式迭代器模式示例代码(python--c++)
设计模式之迭代器模式 设计模式之迭代器模式 设计模式之迭代器模式
设计模式之迭代器模式(新) 设计模式之迭代器模式(新)
23种设计模式之迭代器模式对迭代器模式进行了简单的介绍,并附带了例子程序,和大家分享
迭代器设计模式代码示例--以最简单的代码诠释迭代器设计模式
matlab开发-设计模式迭代器行为。迭代器行为设计模式的matlab®oop实现
设计模式的迭代器模式的例子,希望对大家有用~~~~~~~~