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、当访问一个聚合对象的内容而无须暴露其内部细节的表示时。

  • 相关阅读:
    算法(第四版)C# 习题题解——2.4
    算法(第四版)C# 习题题解——2.3
    .NET编译的目标平台(AnyCPU,x86,x64)
    Windows无法访问局域网内共享文件夹[0x800704cf,0x80070035]解决方案
    ASP.NET 网站部署到IIS上如何进行调试
    ASP.NET 前台Javascript调用后台代码 / 后台调用前台Javascript
    C#反射-Assembly.Load、LoadFrom与LoadFile
    Entity Framework Context上下文管理(CallContext 数据槽)
    Entity Framework(EF的Code First方法)
    Entity Framework(EF的Model First方法)
  • 原文地址:https://www.cnblogs.com/mcjhcnblogs/p/14208799.html
Copyright © 2011-2022 走看看