zoukankan      html  css  js  c++  java
  • 【设计模式】行为型04迭代器模式(Iterator Pattern)

          学习地址:http://www.runoob.com/design-pattern/iterator-pattern.html

          迭代器模式,简单来说就是通过迭代的方式对集合进行遍历,在集合的学习中也一定会接触迭代遍历,原理是一样的。所以这里简单说一下,重在自己体会:

    类图:


          实现:

    1、迭代器接口:

    package com.pat.iterator;
    /**
     * 定义一个迭代器接口
     * @author zx
     *
     */
    public interface Iterator {
    	//是否有下一个元素
    	public boolean hasNext();
    	//获取下一个元素
    	public Object next();
    }
    

    2、集合接口

    package com.pat.iterator;
    /**
     * 容器对象,持有自己的迭代器
     * @author zx
     *
     */
    public interface Containter {
    	public Iterator getIterator();
    }
    

    3、持有迭代器内部类的对象

    package com.pat.iterator;
    /**
     * 实际集合,包含一个具体的迭代器
     * @author zx
     *
     */
    public class NameRepository implements Containter{
    	//名称集合
    	public String names[] = {"AA" , "BB" ,"CC" , "DD", "EE"};
    	@Override
    	public Iterator getIterator() {
    		//返回一个迭代器对象
    		return new NameIterator();
    	}
    	/**
    	 * 内部类
    	 */
    	private class NameIterator implements Iterator{
    		int index;
    		@Override
    		public boolean hasNext() {
    			if(index<names.length) {
    				return true;
    			}
    			return false;
    		}
    
    		@Override
    		public Object next() {
    			if(this.hasNext()){
    				//返回下标的数据并且index+1
    				return names[index++];
    			}
    			return null;
    		}
    		
    	}
    
    }
    

    4、测试

    package com.pat.iterator;
    
    public class Test {
    	public static void main(String[] args) {
    		NameRepository nr = new NameRepository();
    		Iterator iterator = nr.getIterator();
    		while(iterator.hasNext()) {
    			String name = (String)iterator.next();
    			System.out.println("Name : " + name);
    		}
    
    		//		for(Iterator iter = nr.getIterator(); iter.hasNext();){
    		//	         String name = (String)iter.next();
    		//	         System.out.println("Name : " + name);
    		//	      }    
    	}
    }
    

    5、结果

    Name : AA
    Name : BB
    Name : CC
    Name : DD
    Name : EE

  • 相关阅读:
    bash八大扩展一网打尽
    MySQL命令行导出数据库
    Windows 7上的DirectX 11.1
    把KlayGE嵌入其他GUI框架
    KlayGE的资源载入系统
    学习路漫漫……
    写下我的第一篇Post,呵呵
    今天学习:CSS中的类class和标识id选择符(.和#号)
    Remove Duplicates from Unsorted List
    2012 TODO List
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054149.html
Copyright © 2011-2022 走看看