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

    定义:提供一种方法来访问一个对象中的聚合的各种元件,不暴露对象的内部表示。

    图:


    演示样例代码:

    public interface Iterator {
    
    	public Object First();
    
    	public Object Next();
    
    	public boolean isDone();
    
    	public Object currentItem();
    }
    public class ConcreteIterator implements Iterator{
    
    	private ConcreteAggregate aggregate;
    	private int current = 0;
    
    	public ConcreteIterator(ConcreteAggregate aggregate) {
    		
    		this.aggregate = aggregate;
    	}
    
    	@Override
    	public Object First() {
    		// TODO Auto-generated method stub
    		return aggregate.get(0);
    	}
    
    	@Override
    	public Object Next() {
    		// TODO Auto-generated method stubg
    		Object ret = null;
    		current ++;
    		if (current < aggregate.count()) {
    			ret = aggregate.get(current);
    		}
    		return ret;
    	}
    
    	@Override
    	public boolean isDone() {
    		// TODO Auto-generated method stub
    		return current >= aggregate.count()? true : false;
    	}
    
    	@Override
    	public Object currentItem() {
    		// TODO Auto-generated method stub
    		return aggregate.get(current);
    	}
    	
    }
    
    public abstract class Aggregate {
    
    	public abstract Iterator createIterator();
    }
    
    public class ConcreteAggregate extends Aggregate {
    
    	private List<Object> items = new ArrayList<Object>();
    
    	@Override
    	public Iterator createIterator() {
    		// TODO Auto-generated method stub
    		return new ConcreteIterator(this);
    	}
    
    	public int count() {
    		return items.size();
    	}
    
    	public Object get(int index) {
    
    		return items.get(index);
    	}
    
    	public void add(Object obj) {
    		items.add(obj);
    	}
    }
    
    client代码例如以下:

    public class Client {
    
    	public static void main(String[] args) {
    		
    		ConcreteAggregate a = new ConcreteAggregate();
    		a.add("123");
    		a.add("菜鸟");
    		a.add("阿里");
    		
    		Iterator i = new ConcreteIterator(a);
    		Object item = i.First();
    		while (!i.isDone()) {
    			System.out.println(i.currentItem());
    			i.Next();
    		}
    	}
    }
    

    执行结果:

    123

    菜鸟

    阿里



    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    模拟赛12-10
    uva-11235
    中国剩余定理
    待学算法
    A
    动态逆序对
    [BZOJ3011][Usaco2012 Dec]Running Away From the Barn
    题目1007:奥运排序问题(结构体排序)
    题目1006:ZOJ问题(字符串处理)
    题目1005:Graduate Admission(结构体排序)
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4628353.html
Copyright © 2011-2022 走看看