设计模式 - 迭代器模式
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()+"");
}
}
}
以上是关于设计模式 - 迭代器模式的主要内容,如果未能解决你的问题,请参考以下文章