• 迭代器模式


    1、简介

      迭代器模式又叫游标模式,是对象的行为模式,迭代器模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象

    2、迭代器模式的类图

    3、迭代器模式涉及到的角色

      从上图可以看出,迭代器模式涉及到以下几个角色

      3.1、抽象迭代器角色:它定义了遍历元素所需要的接口

      3.2、具体迭代器角色:实现抽象迭代器所声明的接口  并保持迭代过程中的游标位置

      3.3、抽象容器角色:声明可以操作容器的方法,其中包括一个获取迭代器多想的方法

      3.4、具体容器角色:实现抽象容器角色声明的方法。

    4、源代码

      4.1、抽象迭代器角色

     
    package Iterator;
    /**
     * ********************************************************  
    * @ClassName: Iterator 
    * @Description: 抽象迭代器角色
    *  
    **********************************************************
     */
    public interface Iterator {
        public boolean hasNext();
        public Object next();
    }
     

      4.2、具体迭代器角色

     
    package Iterator;
    /**
     * ********************************************************  
    * @ClassName: ConcreteIterator 
    * @Description: 具体迭代器角色
    *  
    **********************************************************
     */
    public class ConcreteIterator implements Iterator{
    
         private List list = null;
         private int index;
          
         public ConcreteIterator(List list) {
                 super();
                 this.list = list;
             }
         
         @Override
         public boolean hasNext() {
                 if (index >= list.getSize()) {
                     return false;
                 } else {
                     return true;
                 }
             }
         
        @Override
        public Object next() {
             Object object = list.get(index);
             index++;
             return object;
         }
    
    }
     

      4.3、抽象容器角色

     
    package Iterator;
    /**
     * ********************************************************  
    * @ClassName: List 
    * @Description:抽象容器角色
    *  
    **********************************************************
     */
    public interface List {
         //定义集合可以进行的操作
         public void add(Object obj);  
         public Object get(int index);
         public Iterator iterator();  
         public int getSize();
    }
     

      4.4、具体容器角色

     
    package Iterator;
    /**
     * ********************************************************  
    * @ClassName: ConcreteAggregate 
    * @Description: 具体容器角色
    *  
    **********************************************************
     */
    public class ConcreteAggregate implements List{
         private Object[] list;
         private int size=0;
         private int index=0;
         public ConcreteAggregate(){
             index=0;
             size=0;
             list=new Object[100];
            }
        @Override
        public void add(Object obj) {
            list[index++]=obj;
            size++;
            }
        
        @Override
        public Iterator iterator() {
           return new ConcreteIterator(this);
            }
        @Override
        public Object get(int index) {
           return list[index];
           }
        @Override
        public int getSize() {
          return size;
           }
    }
     

      4.5、测试客户端

     
    package Iterator;
    /**
     * ********************************************************  
    * @ClassName: Client 
    * @Description: 迭代器模式测试客户端
    *  
    **********************************************************
     */
    public class Client {
    
        public static void main(String[] args) {
            List list=new ConcreteAggregate();
                  list.add("a");
                  list.add("b");
                  list.add("c");
                  list.add("d");
                  Iterator it=list.iterator();
                  while(it.hasNext()){
                       System.out.println(it.next());
                  }
        }
    
    }
  • 相关阅读:
    Web框架
    Java并发编程:Callable、Future和FutureTask
    5分钟了解Mockito
    用IntelliJ IDEA创建Gradle项目简单入门
    QrenCode : linux命令行下生成二维码图片
    git 撤销commit
    curl网站开发指南
    H2数据库攻略
    Guice入门
    linux debian 时间设置中无法选择“自动设定时间和日期”
  • 原文地址:https://www.cnblogs.com/lanblogs/p/15175779.html
Copyright © 2020-2023  润新知