zoukankan      html  css  js  c++  java
  • 迭代器模式/iterator模式/对象行为型模式

    意图

    又名:游标(Cursor);
    提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

    动机

    一个聚合对象,提供访问元素的方法,而有不暴露它的内部结构。如list,将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器(iterator)中。迭代器定义了一个访问该列表元素的接口。迭代器负责跟踪当前元素。

    java实现要素:迭代器接口+迭代器+集合接口+集合实现

    1. 集合接口中定义,返回迭代器的接口方法
    2. 集合对象中具体实现返回的迭代器

    代码实现

    //迭代器接口
        public interface Iterator <T>{
        boolean hasNext();
    	T next();
    	T get(int index);
    }
    
    //集合接口
    public interface List <T>{
        Iterator<T> iterator();
    	public T get(int i);
    	public int size();
    }
    
    //集合实现,采用内部类实现迭代器。内部类可以操作外部类数据(私有数据)。
    public class MyList  implements List<String>{
        private String[] data = {"A","B","C","D","E"};  
    	public Iterator<String> iterator(){
    		return new itr(); 
    	}
    	
    	public String get(int i){
    		return data[i];
    	}
    	
    	public int size(){
    		return data.length;
    	}
    	
    	private class itr implements Iterator<String>{
    		private int pos=-1;
    		@Override
    		public boolean hasNext() {
    			if (pos<data.length-1) {
    				return true;
    			}
    			return false;
    		}
    
    		@Override
    		public String next() {
    			if (pos<data.length-1) {
    				++pos;
    			}
    			return data[pos];
    		}
    
    		@Override
    		public String get(int index) {
    			if (index<data.length) {
    				return data[pos];
    			}
    			return "";
    		}
    	}
    }
    
    //测试
    public class Test {
        public static void main(String[] args) {
    		MyList myList=new MyList();
    		Iterator<String> iterator=myList.iterator();
    		while(iterator.hasNext()){
    			System.out.println(iterator.next());
    		}
    	}
    }
    
    

    JDK中的迭代器模式

    整个JCF,遍地都是.....

     * @see     Set
     * @see     List
     * @see     Map
     * @see     SortedSet
     * @see     SortedMap
     * @see     HashSet
     * @see     TreeSet
     * @see     ArrayList
     * @see     LinkedList
     * @see     Vector
     * @see     Collections
     * @see     Arrays
     * @see     AbstractCollection
     * @since 1.2
     */
    
    public interface Collection<E> extends Iterable<E> {
    
    
  • 相关阅读:
    $python日期和时间的处理
    $python生成器
    $思维导图——numpy基本知识
    $python用装饰器实现一个计时器
    $ MySQL-python数据库模块用法
    CentOS 7.2下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1
    Nginx、Apache工作原理及Nginx为何比Apache高效
    Apache的三种工作模式及相关配置
    ThinkPHP框架
    session与cookie的区别是什么?如果客户端禁用了cookie功能,将会对session有什么影响?
  • 原文地址:https://www.cnblogs.com/lknny/p/5897339.html
Copyright © 2011-2022 走看看