• 设计模式迭代器模式


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

    图:


    演示样例代码:

    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

    菜鸟

    阿里



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

  • 相关阅读:
    #跟着教程学# 6、maya/python window命令
    element 中MessageBox的封装
    vue中XLSX解析excel文件
    git工作区-暂存区
    GIT相关
    弹窗-二维码生成与下载
    输入框限定100个汉字或200字符
    深浅拷贝(详细)
    日期选择器选取时间范围(非空以及初始时间不能在当天以前)
    多选
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4628353.html
Copyright © 2020-2023  润新知