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

  • 相关阅读:
    Springboot开发微信公众号(四)
    Springboot开发微信公众号(三)
    springboot中Scheduled不执行的原因
    static方法里用@Autowire或者@Resource注入的属性
    Spring boot 读取配置文件application.yml (自定义属性值)
    Apache-Flink深度解析-SQL概览
    Apache-Flink深度解析-DataStream-Connectors之Kafka
    Apache-Flink深度解析-JOIN 算子
    Apache-Flink深度解析-TableAPI
    Spark streaming消费Kafka的正确姿势
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054149.html
Copyright © 2011-2022 走看看