设计模式 - 迭代器模式

た 入场券 2022-09-03 14:24 469阅读 0赞

一、基本概念

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

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

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

二、基本实现

在这里插入图片描述

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

  1. public interface Iterator {
  2. boolean hasNext();
  3. Object next();
  4. }

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

  1. public interface ContainerRepository {
  2. Iterator getIterator();
  3. }

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

  1. public class VipContainer implements ContainerRepository{
  2. List<Book> list = new ArrayList<>();
  3. List<Book> getList(){ return list;}
  4. int index=0;
  5. boolean addBook(Book book){
  6. if(list.add(book))
  7. return true;
  8. else
  9. return false;
  10. }
  11. @Override
  12. public Iterator getIterator() {
  13. return new VipIterator();
  14. }
  15. // 定义具体的迭代指针实现
  16. private class VipIterator implements Iterator{
  17. @Override
  18. public boolean hasNext() {
  19. if(index<list.size())
  20. return true;
  21. else
  22. return false;
  23. }
  24. @Override
  25. public Object next() {
  26. if(hasNext())
  27. return list.get(index++);
  28. else
  29. return null;
  30. }
  31. }
  32. }

实现遍历:

  1. public class Main {
  2. public static void main(String[]args){
  3. VipContainer vc = new VipContainer();
  4. vc.addBook(new Book(1,"test","hello!"));
  5. Iterator iterator = vc.getIterator();
  6. while(iterator.hasNext()){
  7. System.out.println(iterator.next()+"");
  8. }
  9. }
  10. }

发表评论

表情:
评论列表 (有 0 条评论,469人围观)

还没有评论,来说两句吧...

相关阅读

    相关 设计模式-模式

    > 迭代器模式结构图 意图:提供一种方法顺序访问一个聚合对象中的各个元素,且不需要暴露该对象的内部表示。 主要解决:不同的方式来遍历整个整合对象。  ![watermar

    相关 设计模式- 模式

    设计模式 - 迭代器模式 场景 小张的朋友开了一家酒店,最近新收购了一家庭旅馆。需要对自己酒店的房间和家庭旅馆的房间进行统一管理,但是两家之间都有各自的实现存储房间

    相关 设计模式——模式

    迭代器模式定义 提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。 使用场景 循环打印一个字符串集合,里面就用到了迭代器模式,迭代器的作用就是将