zoukankan      html  css  js  c++  java
  • 迭代器模式

    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());
                  }
        }
    
    }
  • 相关阅读:
    moment.js常用时间示例,时间管理
    RabbitMQ用户增删及权限控制
    CDN概念基本介绍
    在LinkedIn的 Kafka 生态系统
    发行说明
    Kafka 1.0版本发布
    redis应用场景及实例
    Redis哨兵集群
    redis-订阅与发布
    redis事务
  • 原文地址:https://www.cnblogs.com/lanblogs/p/15175779.html
Copyright © 2011-2022 走看看