设计模式 - 迭代器模式

Posted adventure.Li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 - 迭代器模式相关的知识,希望对你有一定的参考价值。

一、基本概念

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
迭代器模式属于行为型模式

一般来说,对应集合结构提供 存储数据访问两种基本功能,在一些特定的场景只需要进行特定访问操作,无需进行存储操作(CRUD系列操作 ),这样直接使用集合返回,就暴露了内部的结构。而迭代器模式则将存储和访问进行分离,也体现了单一职责原则的思想。

class CostumerService{
   List<Costumer> list = new ArrayList<>();
   List<Costumer> visitData(){
   return list;
   }
   // 此处本来只想进行访问,结构拿到list具体的结构,便知道内部结构组织,破坏封装性。
}

二、基本实现

定义迭代器指针,可以定义一些迭代的方式。

public interface Iterator {
    boolean hasNext();
    Object next();
}

迭代容器( 实现迭代容器的协议,自己封装容器需要满足的接口,而关于容器怎么迭代是Iterator协议去规范(具体则是class concreteIteractor实现) )

public interface ContainerRepository {
    Iterator getIterator();
}

具体集合类(将迭代器类在该类实现)

public class VipContainer implements ContainerRepository{

    List<Book> list = new ArrayList<>();

    List<Book> getList(){return list;}


    int index=0;
    boolean addBook(Book book){
        if(list.add(book))
            return true;
        else
            return false;
    }

    @Override
    public Iterator getIterator() {
        return new VipIterator();
    }

    // 定义具体的迭代指针实现
    private class VipIterator implements Iterator{
        @Override
        public boolean hasNext() {
            if(index<list.size())
                return true;
            else
                return false;
        }

        @Override
        public Object next() {
            if(hasNext())
                return list.get(index++);
            else
                return null;
        }
    }

}

实现遍历:

public class Main {
    public static void main(String[]args){
        VipContainer vc = new VipContainer();
        vc.addBook(new Book(1,"test","hello!"));
        Iterator iterator = vc.getIterator();

        while(iterator.hasNext()){
            System.out.println(iterator.next()+"");
        }
    }
}

以上是关于设计模式 - 迭代器模式的主要内容,如果未能解决你的问题,请参考以下文章

Java源代码-迭代器模式

Python 设计模式 — 行为型模式 — 迭代器模式

设计模式-迭代器模式

Python 设计模式 — 行为型模式 — 迭代器模式

设计模式学习

设计模式之迭代器模式