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

    定义:提供了一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象内部表露

    优点:

    1,访问一个聚合对象的内容而无需暴露它的内部表示

    2,遍历任务交由迭代器完成,这简化了聚合类

    3,它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历

    4,增加新的聚合类和迭代器类都很方便,无需修改原有代码

    5,封装性良好,为遍历不同的聚合结构提供一个统一的接口

    缺点:

    增加类的个数,这在一定程度上增加了系统的复杂性

    模式结构

    1,抽象聚合:存储,添加,删除聚合对象以及创建迭代器对象的接口

    2,实现抽象聚合类,返回一个具体迭代器的实例

    3,抽象迭代器:定义访问和遍历聚合元素的接口,通常包含hasNext(),first(),next()等方法

    4,具体迭代器:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置

    应用场景:

    1,当需要为聚合对象提供多种遍历方式时

    2,当需要为遍历不同的聚合结构提供一个统一接口时

    3,当访问一个聚合对象的内容而无需暴露其内部细节的表示时

    结构图如下

     代码:

    package iterator;
    import java.util.*;
    public class IteratorPattern
    {
        public static void main(String[] args)
        {
            Aggregate ag=new ConcreteAggregate(); 
            ag.add("中山大学"); 
            ag.add("华南理工"); 
            ag.add("韶关学院");
            System.out.print("聚合的内容有:");
            Iterator it=ag.getIterator(); 
            while(it.hasNext())
            { 
                Object ob=it.next(); 
                System.out.print(ob.toString()+"	"); 
            }
            Object ob=it.first();
            System.out.println("
    First:"+ob.toString());
        }
    }
    //抽象聚合
    interface Aggregate
    { 
        public void add(Object obj); 
        public void remove(Object obj); 
        public Iterator getIterator(); 
    }
    //具体聚合
    class ConcreteAggregate implements Aggregate
    { 
        private List<Object> list=new ArrayList<Object>(); 
        public void add(Object obj)
        { 
            list.add(obj); 
        }
        public void remove(Object obj)
        { 
            list.remove(obj); 
        }
        public Iterator getIterator()
        { 
            return(new ConcreteIterator(list)); 
        }     
    }
    //抽象迭代器
    interface Iterator
    {
        Object first();
        Object next();
        boolean hasNext();
    }
    //具体迭代器
    class ConcreteIterator implements Iterator
    { 
        private List<Object> list=null; 
        private int index=-1; 
        public ConcreteIterator(List<Object> list)
        { 
            this.list=list; 
        } 
        public boolean hasNext()
        { 
            if(index<list.size()-1)
            { 
                return true;
            }
            else
            {
                return false;
            }
        }
        public Object first()
        {
            index=0;
            Object obj=list.get(index);;
            return obj;
        }
        public Object next()
        { 
            Object obj=null; 
            if(this.hasNext())
            { 
                obj=list.get(++index); 
            } 
            return obj; 
        }   
    }
  • 相关阅读:
    zabbix 配置发送邮件报警
    sql server 修改表结构语法大全
    SQL Server日期与字符串之间的转换
    Convert.ToDateTime(值),方法可以把一个值转化成DateTime类型。
    Oracle trunc()函数的用法
    Oracle job procedure 存储过程定时任务
    向数据库中插入一个DateTime类型的数据到一个Date类型的字段中,需要转换类型。TO_DATE('{0}','YYYY-MM-DD'))
    逗号分隔的字符串转换为行数据(collection)(续)
    Oracle中INSTR、SUBSTR和NVL的用法
    oracle中substr() instr() 用法
  • 原文地址:https://www.cnblogs.com/cwb123/p/13964995.html
Copyright © 2011-2022 走看看