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


           迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,让我们能游走与聚合内的每一个元素,而又不暴露其内部的表示。
           把游走的任务放在迭代器上,而不是聚合上这样简化了聚合的接口和实现,也让责任各得其所
           提供一种可以遍历聚合对象的方式,又称为:游标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

  • 相关阅读:
    1539. Kth Missing Positive Number (E)
    0082. Remove Duplicates from Sorted List II (M)
    0526. Beautiful Arrangement (M)
    解决mac电脑耳机/外放突然无声音
    利用蒙特卡洛方法实现21点问题的最优解(内含python源码)
    浅析机器视觉在医疗影像处理中的应用
    基于最近邻法手写数字识别(内附python源码)
    最新版 | 2020李沐《动手学深度学习》中文版pdf重磅开源!
    干货收藏!639页《深度学习:Deep Learning》图文并茂课程PPT
    22课时、19大主题,CS 231n进阶版课程视频上线!
  • 原文地址:https://www.cnblogs.com/wxisme/p/4541008.html
Copyright © 2020-2023  润新知