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

    菜鸟

    阿里



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

  • 相关阅读:
    myBatis之事务管理
    关于Spring事务回滚的问题
    mysql中的多行查询结果合并成一个
    mybatis传递参数到mapping.xml
    EasyUI 中 DataGrid 控件 列 如何绑定对象中的属性
    写给java开发的运维笔记
    SpringMVC学习系列(11) 之 表单标签
    eclipse 安装svn插件
    linux(centos)搭建SVN服务器
    JavaServer Faces 2.0 can not be installed解决方案
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4628353.html
Copyright © 2011-2022 走看看