• 设计模式——迭代器模式


           迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,让我们能游走与聚合内的每一个元素,而又不暴露其内部的表示。
           把游走的任务放在迭代器上,而不是聚合上这样简化了聚合的接口和实现,也让责任各得其所
           提供一种可以遍历聚合对象的方式,又称为:游标cursor模式
           聚合对象:存储数据
           迭代器:遍历数据
           JDK内置iterator  正向迭代  反向迭代
           设计原则:一个类应该只有一个引起变化的原因。

           看一个简单的迭代器模式Demo:

          

    public interface MyIterator {
    	Object first();
    	Object last();
    	Object next();
    	boolean hasNext();
    	boolean isFirst();
    	boolean isLast();
    	
    }
    
    public class ConcreteAggregate {
    	private List<Object> list;
    	
    	public ConcreteAggregate() {
    		list = new ArrayList<>();
    	}
    	public void add(Object obj) {
    		list.add(obj);
    	}
    	public void remove(Object obj) {
    		list.remove(obj);
    	}
    	
    	public void setList(List<Object> list) {
    		this.list = list;
    	}
    	public List<Object> getList() {
    		return list;
    	}
    	
    	public MyIterator createIterator() {
    		return new ConcreteIterator();
    	}
    	
    	
    	//使用内部类来实现具体的iterator  面向接口编程
    	public class ConcreteIterator implements MyIterator {
    		private int cur;
    		
    		@Override
    		public Object first() {
    			return list.get(0);
    		}@Override
    		public boolean hasNext() {
    			return cur<list.size()? true : false;
    		}@Override
    		public boolean isFirst() {
    			return cur==0? true : false;
    		}@Override
    		public boolean isLast() {
    			return cur==list.size()-1? true : false;
    		}@Override
    		public Object last() {
    			return list.get(list.size()-1);
    		}@Override
    		public Object next() {
    			if(cur < list.size())
    				return list.get(cur++);
    			else
    				return null;
    		}
    		
    	}
    	
    
    }
    
    public class Client {
    	public static void main(String[] args) {
    		ConcreteAggregate cag = new ConcreteAggregate();
    		for(int i=0; i<26; i++) {
    			cag.add((char)(i+'a')+"");
    		}
    		MyIterator iterator = cag.createIterator();
    		System.out.print(iterator.first());
    		iterator.next();
    		while(iterator.hasNext()) {
    			System.out.print(" " + iterator.next());
    		}
    	}
    }
    

     运行结果:

      a b c d e f g h i j k l m n o p q r s t u v w x y z

  • 相关阅读:
    How to do Deep Learning on Graphs with Graph Convolutional Networks
    《编程珠玑》读书笔记
    NFFM的原理与代码
    场感知因子分解机器的原理与代码
    数学公式中的变体字母
    因子分解机原理与代码
    LightGBM GPU python版本安装
    Pytorch:使用GPU训练
    [FJOI2020]世纪大逃亡 题解
    [统一省选2020]冰火战士 题解
  • 原文地址:https://www.cnblogs.com/wxisme/p/4541008.html
Copyright © 2020-2023  润新知