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

原文地址:https://www.cnblogs.com/mcjhcnblogs/p/14208799.html