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

    菜鸟

    阿里



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

  • 相关阅读:
    Principle of Computing (Python)学习笔记(5) BFS Searching + Zombie Apocalypse
    《Java从入门到精通》src9-25
    《Java从入门到精通》src0-8
    windows查看某个端口被谁占用
    css selector: xpath:
    awk 正则表达式
    Centos系统各种日志存详解
    mysql日志文件
    mysql主键设置成auto_increment时,进行并发性能測试出现主键反复Duplicate entry &#39;xxx&#39; for key &#39;PRIMARY&#39;
    递归函数时间复杂度分析
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4628353.html
Copyright © 2011-2022 走看看