Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1332826
  • 博文数量: 185
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 3934
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 13:11
个人简介

iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕

文章分类

全部博文(185)

文章存档

2014年(4)

2013年(181)

分类: Java

2013-07-25 10:48:23

概述

    给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

适用性

    1.访问一个聚合对象的内容而无需暴露它的内部表示。

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

    3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)。
			

参与者

    1.Iterator
      迭代器定义访问和遍历元素的接口。

    2.ConcreteIterator
      具体迭代器实现迭代器接口。
      对该聚合遍历时跟踪当前位置。

    3.Aggregate
      聚合定义创建相应迭代器对象的接口。

    4.ConcreteAggregate
      具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例.


类图

示例代码:


  1. package com.sql9.actioned;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. /** 
  7.  * 迭代器模式 实现示例 
  8.  * @author sean 
  9.  */  
  10. interface IIterator {  
  11.     T next();  
  12.     void first();  
  13.     void last();  
  14.     boolean hasNext();  
  15. }  
  16.   
  17. class IIteratorImpl implements IIterator {  
  18.     private IList list;  
  19.     private int index;  
  20.       
  21.     public IIteratorImpl (IList list) {  
  22.         index = 0;  
  23.         this.list = list;  
  24.     }  
  25.       
  26.     @Override  
  27.     public T next() {  
  28.         T t = list.get(index);  
  29.         index++;  
  30.         return t;  
  31.     }  
  32.   
  33.     @Override  
  34.     public void first() {  
  35.         index = 0;  
  36.     }  
  37.   
  38.     @Override  
  39.     public void last() {  
  40.         index = list.size();  
  41.     }  
  42.   
  43.     @Override  
  44.     public boolean hasNext() {  
  45.         return index < list.size();  
  46.     }  
  47.       
  48. }  
  49.   
  50. interface IList {  
  51.     IIterator iterator();  
  52.     T get(int index);  
  53.     int size();  
  54.     void add(T obj);  
  55. }  
  56.   
  57. class IListImpl implements IList {  
  58.     private List list;  
  59.     private int index;  
  60.       
  61.     public IListImpl() {  
  62.         list = new ArrayList();  
  63.         index = 0;  
  64.     }  
  65.       
  66.     @Override  
  67.     public IIterator iterator() {  
  68.         return new IIteratorImpl (this);  
  69.     }  
  70.   
  71.     @Override  
  72.     public T get(int index) {  
  73.         return list.get(index);  
  74.     }  
  75.   
  76.     @Override  
  77.     public int size() {  
  78.         return list.size();  
  79.     }  
  80.   
  81.     @Override  
  82.     public void add(T obj) {  
  83.         list.add(obj);  
  84.     }  
  85.       
  86. }  
  87.   
  88. public class IteratorTest {  
  89.   
  90.     public static void main(String[] args) {  
  91.         // 2 ways of iteration  
  92.         IList list = new IListImpl();  
  93.         list.add("a");  
  94.         list.add("b");  
  95.         list.add("c");  
  96.           
  97.         // 1st way  
  98.         System.out.println("1. using iterator to traverse:");  
  99.         IIterator iter = list.iterator();  
  100.         while (iter.hasNext()) {  
  101.             System.out.println(iter.next());  
  102.         }  
  103.           
  104.         // 2nd way  
  105.         System.out.println("2. using list to traverse: ");  
  106.         for (int i=0; i
  107.             System.out.println(list.get(i));  
  108.         }  
  109.     }  
  110.   
  111. }  


结果:

1. using iterator to traverse:
a
b
c
2. using list to traverse: 
a
b
c

阅读(2085) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~