zoukankan      html  css  js  c++  java
  • 设计模式16:迭代器模式

    泛型相关请参考:http://www.cnblogs.com/lwbqqyumidi/p/3837629.html

    uml:

    Aggregate及其子类:

    public abstract class Aggregate<T> {
    	
    	public abstract Iterator<T> getIterator();
    	public abstract T get(int index);
    	public abstract int getLength();
    	public abstract void add(T e);
    	public abstract void remove(T e);
    
    }
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ConcreteAggregate<T> extends Aggregate<T> {
    	
    	private List<T> list = new ArrayList<>();
    	
    	@Override
    	public int getLength(){
    		return list.size();
    	}
    	
    	@Override
    	public void add(T item) {
    		list.add(item);
    	}
    	
    	@Override
    	public void remove(T item) {
    		list.remove(item);
    	}
    	
    	@Override
    	public T get(int index){
    		return list.get(index);
    	}
    
    	@Override
    	public Iterator<T> getIterator() {
    		return new ConcreteIterator<T>(this);
    	}
    
    }
    

      

    Iterator及其子类:

    public abstract class Iterator<T> {
    	
    	public abstract boolean hasNext();
    	public abstract T next();
    }
    
    public class ConcreteIterator<T> extends Iterator<T> {
    	
    	private ConcreteAggregate<T> aggr;
    	private int current = 0;
    	
    	public ConcreteIterator(ConcreteAggregate<T> aggr) {
    		this.aggr = aggr;
    	}
    
    	@Override
    	public boolean hasNext() {
    		return current < aggr.getLength() ? true : false;
    	}
    
    	@Override
    	public T next() {
    		// TODO Auto-generated method stub
    		current++;
    		return aggr.get(current - 1);
    	}
    
    }
    

    Demo:

    public class IteratorDemo {
    	
    	public static void main(String[] args) {
    		Aggregate<Integer> aggregate = new ConcreteAggregate<>();
    		for(int i = 0; i < 10; i++){
    			aggregate.add(i);
    		}
    		Iterator<Integer> iterator = aggregate.getIterator();
    		while(iterator.hasNext()){
    			System.out.println(iterator.next());
    		}
    	}
    
    }
    

      

  • 相关阅读:
    火狐浏览器标签之间切换的快捷键
    LeetCode 69. x 的平方根
    LeetCode 51. N皇后
    win 10 自带 Ubuntu 系统的文件位置
    LeetCode 122. 买卖股票的最佳时机 II
    LeetCode 169. 求众数
    LeetCode 50. Pow(x, n)
    LeetCode 236. 二叉树的最近公共祖先
    LeetCode 235. 二叉搜索树的最近公共祖先
    LeetCode 98. 验证二叉搜索树
  • 原文地址:https://www.cnblogs.com/zcy-backend/p/6719612.html
Copyright © 2011-2022 走看看