zoukankan      html  css  js  c++  java
  • java23种设计模式-行为型模式-迭代器模式

    一、定义

    迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式。

    二、优点及缺点

    优点:

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

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

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

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

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

    缺点:

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

    三、代码实现:

    List接口类:

    package com.example.demo.sjms.diedaiqimoshi;
    
    import java.util.Iterator;
    
    /**
     *  @Author: caesar
     *  @Date:2020年12月29日 20:12:27
     *  @Description: List 接口
     */
    public interface MyList {
        // 添加
        public void add(Object object);
        // 删除
        public void remove(Object object);
        // 获取迭代器
        public MyIterator iterator();
    }

    接口实现类:

    package com.example.demo.sjms.diedaiqimoshi;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     *  @Author: caesar
     *  @Date:2020年12月29日 20:12:55
     *  @Description: ArrayList实现
     */
    public class MyArrayList implements MyList{
        private List<Object> list = new ArrayList<Object>();
        @Override
        public void add(Object object) {
            list.add(object);
        }
    
        @Override
        public void remove(Object object) {
            list.remove(object);
        }
    
        @Override
        public MyIterator iterator() {
            return new MyIteratorImpl(this.list);
        }
    }

    迭代器接口类:

    package com.example.demo.sjms.diedaiqimoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年12月29日 20:12:01
     *  @Description: 迭代器接口类
     */
    public interface MyIterator {
        // 判断是否由下一个
        public boolean hasNext();
        // 返回下一个
        public Object next();
        // 获取第一个
        public Object hasFirst();
    }

    迭代器实现类:

    package com.example.demo.sjms.diedaiqimoshi;
    
    import java.util.List;
    
    /**
     *  @Author: caesar
     *  @Date:2020年12月29日 20:12:15
     *  @Description: 迭代实现类
     */
    public class MyIteratorImpl implements MyIterator{
        private List<Object> list = null;
        public MyIteratorImpl(List<Object> list){
           this.list = list;
        }
        int index = 0;
        @Override
        public boolean hasNext() {
            if(index < list.size()){
                return true;
            }
            return false;
        }
    
        @Override
        public Object next() {
            return list.get(index++);
        }
    
        @Override
        public Object hasFirst() {
            return list.get(0);
        }
    }

    测试类:

    package com.example.demo.sjms.diedaiqimoshi;
    
    import java.util.ArrayList;
    
    /**
     * @Author: caesar
     * @Date:2020年12月29日 20:12:24
     * @Description: 测试类
     */
    public class Test {
        public static void main(String[] args) {
            MyList myList = new MyArrayList();
            myList.add("ZS");
            myList.add("LS");
            myList.add("WW");
            MyIterator myIterator = myList.iterator();
            while (myIterator.hasNext()) {
                System.out.println(myIterator.next());
            }
        }
    }

    四、源码级别

    五、总结

    主要解决:

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

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

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

  • 相关阅读:
    分布式理论基础(三)时间、时钟和事件顺序
    分布式理论基础(二)选举、多数派和租约
    分布式理论基础(一)一致性及解决一致性的两种方式:2PC和3PC
    spark入门(三)键值对操作
    spark入门(二)RDD基础操作
    Python的Flask框架入门-Ubuntu
    Python __str__(self)和__unicode__(self)
    Windows下安装和使用MongoDB
    Virtualenv介绍
    python的import与from…import的区别
  • 原文地址:https://www.cnblogs.com/mcjhcnblogs/p/14208799.html
Copyright © 2011-2022 走看看