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

  • 相关阅读:
    MSSQL大量数据时,建立索引或添加字段后保存更改超时该这么办
    POJ 3261 Milk Patterns (后缀数组)
    POJ 1743 Musical Theme (后缀数组)
    HDU 1496 Equations (HASH)
    694. Distinct Substrings (后缀数组)
    POJ 1222 EXTENDED LIGHTS OUT (枚举 或者 高斯消元)
    POJ 1681· Painter's Problem (位压缩 或 高斯消元)
    POJ 1054 The Troublesome Frog (hash散列)
    HDU 1716 排列2
    HDU 4405 Aeroplane chess (概率DP & 期望)
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054149.html
Copyright © 2011-2022 走看看