ITPub博客

首页 > 应用开发 > Java > 迭代子模式

迭代子模式

Java 作者:壹頁書 时间:2017-03-22 11:17:46 0 删除 编辑
http://www.cnblogs.com/java-my-life/archive/2012/05/22/2511506.html



  1. class MainClass {  
  2.     public void operation() {  
  3.         Object[] objArray = { "One", "Two", "Three", "Four", "Five", "Six" };  
  4.         // 创建聚合对象  
  5.         Aggregate agg = new ConcreteAggregate(objArray);  
  6.         // 循环输出聚合对象中的值  
  7.         Iterator it = agg.createIterator();  
  8.         while (!it.isDone()) {  
  9.             System.out.println(it.currentItem());  
  10.             it.next();  
  11.         }  
  12.     }  
  13.   
  14.     public static void main(String[] args) {  
  15.   
  16.         MainClass client = new MainClass();  
  17.         client.operation();  
  18.     }  
  19.   
  20. }  
  21.   
  22. abstract class Aggregate {  
  23.     /** 
  24.      * 工厂方法,创建相应迭代子对象的接口 
  25.      */  
  26.     public abstract Iterator createIterator();  
  27. }  
  28.   
  29. class ConcreteAggregate extends Aggregate {  
  30.   
  31.     private Object[] objArray = null;  
  32.   
  33.     /** 
  34.      * 构造方法,传入聚合对象的具体内容 
  35.      */  
  36.     public ConcreteAggregate(Object[] objArray) {  
  37.         this.objArray = objArray;  
  38.     }  
  39.   
  40.     @Override  
  41.     public Iterator createIterator() {  
  42.   
  43.         return new ConcreteIterator(this);  
  44.     }  
  45.   
  46.     /** 
  47.      * 取值方法:向外界提供聚集元素 
  48.      */  
  49.     public Object getElement(int index) {  
  50.   
  51.         if (index < objArray.length) {  
  52.             return objArray[index];  
  53.         } else {  
  54.             return null;  
  55.         }  
  56.     }  
  57.   
  58.     /** 
  59.      * 取值方法:向外界提供聚集的大小 
  60.      */  
  61.     public int size() {  
  62.         return objArray.length;  
  63.     }  
  64. }  
  65.   
  66. interface Iterator {  
  67.     /** 
  68.      * 迭代方法:移动到第一个元素 
  69.      */  
  70.     public void first();  
  71.   
  72.     /** 
  73.      * 迭代方法:移动到下一个元素 
  74.      */  
  75.     public void next();  
  76.   
  77.     /** 
  78.      * 迭代方法:是否为最后一个元素 
  79.      */  
  80.     public boolean isDone();  
  81.   
  82.     /** 
  83.      * 迭代方法:返还当前元素 
  84.      */  
  85.     public Object currentItem();  
  86. }  
  87.   
  88. class ConcreteIterator implements Iterator {  
  89.     // 持有被迭代的具体的聚合对象  
  90.     private ConcreteAggregate agg;  
  91.     // 内部索引,记录当前迭代到的索引位置  
  92.     private int index = 0;  
  93.     // 记录当前聚集对象的大小  
  94.     private int size = 0;  
  95.   
  96.     public ConcreteIterator(ConcreteAggregate agg) {  
  97.         this.agg = agg;  
  98.         this.size = agg.size();  
  99.         index = 0;  
  100.     }  
  101.   
  102.     /** 
  103.      * 迭代方法:返还当前元素 
  104.      */  
  105.     @Override  
  106.     public Object currentItem() {  
  107.         return agg.getElement(index);  
  108.     }  
  109.   
  110.     /** 
  111.      * 迭代方法:移动到第一个元素 
  112.      */  
  113.     @Override  
  114.     public void first() {  
  115.   
  116.         index = 0;  
  117.     }  
  118.   
  119.     /** 
  120.      * 迭代方法:是否为最后一个元素 
  121.      */  
  122.     @Override  
  123.     public boolean isDone() {  
  124.         return (index >= size);  
  125.     }  
  126.   
  127.     /** 
  128.      * 迭代方法:移动到下一个元素 
  129.      */  
  130.     @Override  
  131.     public void next() {  
  132.   
  133.         if (index < size) {  
  134.             index++;  
  135.         }  
  136.     }  
  137.   
  138. } 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-2135811/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 模板方法模式
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339932