【设计模式】—— 迭代模式Iterator

  前言:【模式总览】——————————by xingoohtml

  模式意图

  提供一个方法按顺序遍历一个集合内的元素,而又不须要暴露该对象的内部表示。ide

  应用场景

  1 访问一个聚合的对象,而不须要暴露对象的内部表示函数

  2 支持对聚合对象的多种遍历this

  3 对遍历不一样的对象,提供统一的接口。spa

  模式结构

  Iterator 定义访问的接口code

/** * 抽象的迭代,有判断结束和下一个,获取当前元素等函数 * @author xingoo * */
interface Iterator{ void first(); void next(); boolean isDone(); Object currentItem(); }

 

  ConcreteIterator 具体的迭代器,跟踪聚合内的元素htm

/** * 具体的迭代类 * @author xingoo * */
class ConcreteIterator implements Iterator{ private ConreteAggregate agg; private int index = 0; private int size = 0; public ConcreteIterator(ConreteAggregate agg) { this.agg = agg; size = agg.size(); index = 0; } public void first() { index = 0; } public void next() { if(index < size){ index++; } } public boolean isDone() { return (index >= size); } public Object currentItem() { return agg.getElement(index); } }

 

  Aggregate 提供聚合的接口对象

/** * 聚合的类 * @author xingoo * */
abstract class Aggregate{ public Iterator createIterator(){ return null; } }

 

  ConcreteAggregate 具体的聚合blog

/** * 具体的聚合对象,拥有大小,建立迭代子等函数 * @author xingoo * */
class ConreteAggregate extends Aggregate{ private Object[] obj = {"test1","test2","test3","test4"}; public Iterator createIterator(){ return new ConcreteIterator(this); } public Object getElement(int index){ if(index < obj.length){ return obj[index]; }else{ return null; } } public int size(){ return obj.length; } }

  所有代码接口

 1 package com.xingoo.Iterator;  2 /**  3  * 聚合的类  4  * @author xingoo  5  *  6  */
 7 abstract class Aggregate{  8     public Iterator createIterator(){  9         return null; 10  } 11 } 12 /** 13  * 抽象的迭代,有判断结束和下一个,获取当前元素等函数 14  * @author xingoo 15  * 16  */
17 interface Iterator{ 18     void first(); 19     void next(); 20  boolean isDone(); 21  Object currentItem(); 22 } 23 /** 24  * 具体的聚合对象,拥有大小,建立迭代子等函数 25  * @author xingoo 26  * 27  */
28 class ConreteAggregate extends Aggregate{ 29     private Object[] obj = {"test1","test2","test3","test4"}; 30     public Iterator createIterator(){ 31         return new ConcreteIterator(this); 32  } 33     public Object getElement(int index){ 34         if(index < obj.length){ 35             return obj[index]; 36         }else{ 37             return null; 38  } 39  } 40     public int size(){ 41         return obj.length; 42  } 43 } 44 /** 45  * 具体的迭代类 46  * @author xingoo 47  * 48  */
49 class ConcreteIterator implements Iterator{ 50     private ConreteAggregate agg; 51     private int index = 0; 52     private int size = 0; 53     
54     public ConcreteIterator(ConreteAggregate agg) { 55         this.agg = agg; 56         size = agg.size(); 57         index = 0; 58  } 59 
60     public void first() { 61         index = 0; 62  } 63 
64     public void next() { 65         if(index < size){ 66             index++; 67  } 68  } 69 
70     public boolean isDone() { 71         return (index >= size); 72  } 73 
74     public Object currentItem() { 75         return agg.getElement(index); 76  } 77     
78 } 79 /** 80  * 客户端 使用方法 81  * @author xingoo 82  * 83  */
84 public class Client { 85     private Iterator it; 86     private Aggregate agg = new ConreteAggregate(); 87     public void operation(){ 88         it = agg.createIterator(); 89         while(!it.isDone()){ 90             System.out.println(it.currentItem().toString()); 91  it.next(); 92  } 93  } 94     public static void main(String[] args) { 95         Client client = new Client(); 96  client.operation(); 97  } 98 }
View Code

  运行结果

test1 test2 test3 test4
相关文章
相关标签/搜索