zoukankan      html  css  js  c++  java
  • 大话设计模式之迭代器模式

    迭代器模式

      提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露对象的内部表示。

    迭代器模式的角色构成

    (1)迭代器角色(Iterator):定义遍历元素所需要的方法,一般来说会有这么三个方法:取得下一个元素的方法next(),判断是否遍历结束的方法hasNext()),移出当前对象的方法remove(),

    (2)具体迭代器角色(Concrete Iterator):实现迭代器接口中定义的方法,完成集合的迭代。

    (3)容器角色(Aggregate):  一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等

    (4)具体容器角色(ConcreteAggregate):就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。

    模拟迭代器实现

    创建迭代器角色 

    /**
     * @Author: chen
     * @Description: 定义抽象迭代器
     * @Date: created in 2018/8/20
     * @Modified By:
     */
    public interface MyIterator {
    
        Boolean hasNext();
        Object next();
    
    }  

    自定一个聚集类;在聚集类内部,使用内部类的方式来定义迭代器的具体实现。

    package com.chenpt.designModel.iteratorModel;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @Author: ch
     * @Description: 聚集类
     * @Date: created in 2018/8/20
     * @Modified By:
     */
    public class Aggregate {
        private List<Object> list = new ArrayList<>();
    
        public MyIterator getIterator(){
            return new InnerIterator();
        }
    
        public void add(Object obj){
            list.add(obj);
        }
    
    
        //使用内部类来定义迭代器
        private class InnerIterator implements MyIterator{
            int i=0;
            public Boolean hasNext(){
                if(i<list.size()){
                    return true;
                }
                return false;
            }
    
            public Object next(){
                return list.get(i++);
            }
        }
    
    }

    客户端测试

    public class MainTest {
    
        public static void main(String[] args){
            Aggregate aggregate = new Aggregate();
            aggregate.add("上海");
            aggregate.add("南京");
            aggregate.add("北京");
    
            for (MyIterator it = aggregate.getIterator();it.hasNext();){
                Object o = it.next();
                System.out.println(o.toString());
            }
        }
    
    }
    //结果
    上海
    南京
    北京
    

    优点:

     1、它支持以不同的方式遍历一个聚合对象。

    2、迭代器简化了聚合类。

    3、在同一个聚合上可以有多个遍历。

    4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

    缺点:

    由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

      

  • 相关阅读:
    统计学六:逻辑回归
    数据分析五:因子分析
    统计学四:聚类分析
    统计学三:线性回归
    统计学二:假设检验与参数估计
    统计学一:描述统计
    数据分析十:高价值用户识别
    数据分析九:互联网征信中的信用评分模型(用户APP使用行为分析)
    数据分析八:互联网征信中的信用评分模型(刷卡行为分析)
    数据分析七:数据治理
  • 原文地址:https://www.cnblogs.com/chenpt/p/9506480.html
Copyright © 2011-2022 走看看