当前位置: 首页 > wzjs >正文

住房建设厅官方网站书法网站建设

住房建设厅官方网站,书法网站建设,wordpress503原因,网站建设的简介迭代器模式(Iterator Pattern)学习笔记 编程相关书籍分享:https://blog.csdn.net/weixin_47763579/article/details/145855793 1. 模式定义 行为型设计模式,提供一种方法顺序访问聚合对象中的各个元素,而无需暴露该对…

迭代器模式(Iterator Pattern)学习笔记


编程相关书籍分享:https://blog.csdn.net/weixin_47763579/article/details/145855793


1. 模式定义

行为型设计模式,提供一种方法顺序访问聚合对象中的各个元素,而无需暴露该对象的内部表示。将遍历逻辑与聚合对象解耦,实现多种遍历方式。

2. 适用场景

✅ 需要统一遍历不同结构的聚合对象
✅ 需要支持多种遍历方式(正序/逆序/过滤等)
✅ 需要隐藏聚合对象的内部结构
✅ 需要为同一聚合对象提供多个并行遍历
✅ 遵循单一职责原则(分离遍历职责)

3. 模式结构

creates
«interface»
Aggregate
+createIterator() : Iterator
ConcreteAggregate
-items: List
+createIterator()
«interface»
Iterator
+hasNext() : boolean
+next() : Object
+remove()
ConcreteIterator
-aggregate: ConcreteAggregate
-index: int
+hasNext()
+next()
Client
+traverse()

4. 核心角色

角色说明
Aggregate聚合接口,定义创建迭代器的方法
ConcreteAggregate具体聚合类,实现创建对应迭代器
Iterator迭代器接口,定义遍历方法
ConcreteIterator具体迭代器,实现遍历逻辑
Client客户端,通过迭代器访问聚合对象

5. 代码示例

5.1 书架遍历示例

// 聚合接口
public interface BookShelf {Iterator<Book> iterator();void addBook(Book book);
}// 具体聚合
public class ConcreteBookShelf implements BookShelf {private List<Book> books = new ArrayList<>();public Iterator<Book> iterator() {return new BookIterator(this);}public void addBook(Book book) {books.add(book);}public int size() {return books.size();}public Book getAt(int index) {return books.get(index);}
}// 迭代器接口
public interface Iterator<T> {boolean hasNext();T next();
}// 具体迭代器
public class BookIterator implements Iterator<Book> {private ConcreteBookShelf bookShelf;private int index = 0;public BookIterator(ConcreteBookShelf bookShelf) {this.bookShelf = bookShelf;}public boolean hasNext() {return index < bookShelf.size();}public Book next() {Book book = bookShelf.getAt(index);index++;return book;}
}// 客户端
public class Client {public static void main(String[] args) {BookShelf shelf = new ConcreteBookShelf();shelf.addBook(new Book("Design Patterns"));shelf.addBook(new Book("Clean Code"));shelf.addBook(new Book("Refactoring"));Iterator<Book> it = shelf.iterator();while(it.hasNext()) {System.out.println(it.next().getTitle());}}
}class Book {private String title;public Book(String title) { this.title = title; }public String getTitle() { return title; }
}

6. 模式变种

  1. 内部迭代器
    将迭代逻辑封装在聚合内部,客户端通过回调函数操作元素

    public interface InternalIterator {void forEach(Consumer<Book> action);
    }// 客户端调用
    bookShelf.forEach(book -> System.out.println(book));
    
  2. 过滤迭代器
    实现条件遍历功能

    public class FilterIterator implements Iterator<Book> {private Iterator<Book> source;private Predicate<Book> predicate;public FilterIterator(Iterator<Book> source, Predicate<Book> predicate) {this.source = source;this.predicate = predicate;}public boolean hasNext() {while(source.hasNext()) {if(predicate.test(source.next())) return true;}return false;}// 实现next()...
    }
    

7. 优缺点分析

✔️ 优点

  • 分离集合对象与遍历算法
  • 支持多种遍历方式
  • 简化聚合接口
  • 支持并行遍历
  • 符合单一职责和开闭原则

缺点

  • 增加系统复杂度(简单集合可能不需要)
  • 遍历效率可能低于直接访问
  • 需要维护迭代器状态

8. 相关模式对比

模式目的关键区别
访问者模式对对象结构元素执行操作迭代器关注遍历,访问者关注操作
组合模式处理树形结构常与迭代器模式结合使用
工厂方法模式创建对象迭代器常使用工厂方法创建具体迭代器

9. 实际应用案例

  • Java集合框架的Iterator接口
  • JDBC的ResultSet遍历
  • XML解析器的节点遍历(DOM4J的NodeIterator)
  • Android的Cursor接口
  • Spring的ResourceArrayPropertyEditor
  • MyBatis的Cursor接口(流式查询)

10. 最佳实践建议

  1. 优先使用现有迭代器:Java集合的Iterator已足够应对多数场景
  2. 实现Iterable接口:方便与增强for循环集成
    public class BookShelf implements Iterable<Book> {// ...public Iterator<Book> iterator() {return new BookIterator(this);}
    }
    
  3. 支持快速失败(fail-fast):检测并发修改
    public class SafeIterator implements Iterator<Book> {private int modCount = expectedModCount;public boolean hasNext() {checkModification();// ...}private void checkModification() {if(modCount != expectedModCount) {throw new ConcurrentModificationException();}}
    }
    
  4. 使用泛型:增强类型安全性
  5. 考虑线程安全:同步访问或返回独立迭代器
  6. 组合使用其他模式:如工厂方法创建迭代器

11. 扩展应用(树形结构遍历)

// 树节点
class TreeNode {String value;List<TreeNode> children = new ArrayList<>();public Iterator<TreeNode> depthFirstIterator() {return new DepthFirstIterator(this);}public Iterator<TreeNode> breadthFirstIterator() {return new BreadthFirstIterator(this);}
}// 深度优先迭代器
class DepthFirstIterator implements Iterator<TreeNode> {private Stack<TreeNode> stack = new Stack<>();public DepthFirstIterator(TreeNode root) {stack.push(root);}public boolean hasNext() {return !stack.isEmpty();}public TreeNode next() {TreeNode current = stack.pop();for(int i = current.children.size()-1; i >=0; i--) {stack.push(current.children.get(i));}return current;}
}// 广度优先迭代器
class BreadthFirstIterator implements Iterator<TreeNode> {private Queue<TreeNode> queue = new LinkedList<>();public BreadthFirstIterator(TreeNode root) {queue.offer(root);}public boolean hasNext() {return !queue.isEmpty();}public TreeNode next() {TreeNode current = queue.poll();queue.addAll(current.children);return current;}
}

🔄 设计原则体现

  1. 单一职责原则:将遍历职责从集合类中分离
  2. 开闭原则:新增迭代器无需修改现有代码
  3. 接口隔离原则:客户端仅依赖迭代器接口

通过迭代器模式,可以实现灵活的集合遍历机制,特别适合需要支持多种遍历方式或隐藏集合内部结构的场景。该模式在集合框架和复杂数据结构处理中应用广泛,是解耦遍历逻辑的经典解决方案。


文章转载自:

http://JyejZEps.phnbd.cn
http://mcolfhaX.phnbd.cn
http://kejj1q9e.phnbd.cn
http://zuboZWrl.phnbd.cn
http://PYc6dl86.phnbd.cn
http://0Q37LOJN.phnbd.cn
http://Zk5oSPXN.phnbd.cn
http://xfhrCDtA.phnbd.cn
http://nfpaTp0l.phnbd.cn
http://XD6gEyDW.phnbd.cn
http://kVlR7JyH.phnbd.cn
http://xAHWSYvz.phnbd.cn
http://2oFqRKMO.phnbd.cn
http://7DQDvbPM.phnbd.cn
http://ZzeN7RDm.phnbd.cn
http://yvaMfcOa.phnbd.cn
http://7AsJMQ0q.phnbd.cn
http://7Fzx8oW6.phnbd.cn
http://NQgf5phh.phnbd.cn
http://NLhPs01S.phnbd.cn
http://V8oEPKAR.phnbd.cn
http://7L09ADiX.phnbd.cn
http://OwfPrAYC.phnbd.cn
http://CULQ6hZS.phnbd.cn
http://Mu9p9dg7.phnbd.cn
http://WsIwMyLq.phnbd.cn
http://GhONnLKi.phnbd.cn
http://25olrX7X.phnbd.cn
http://Fcnz3LHL.phnbd.cn
http://RhiYsHnt.phnbd.cn
http://www.dtcms.com/wzjs/713848.html

相关文章:

  • 商洛市住房和城乡建设局网站6.网站开发流程是什么
  • php网站制作工具网站透明背景
  • 网站标准尺寸物联网是干什么的用的
  • 重庆城乡规划和建设局网站百度平台推广
  • 人才网站建站成都高端网页设计公司
  • 网站制作进度表聊城定制网站建设公司
  • 做网站页面设计报价做彩票网站用什么服务器
  • 网站seo推广方案公司备案网站被注销吗
  • 柳南网站建设软件商城官方下载
  • 网站头部修改wordpress搜索标签页
  • 网站开发人员需要什么要求c2c网站特点
  • 网站站点连接不安全如何浏览国外网站?
  • 公司企业做网站违法吗山东省住房建设厅网站考试项目
  • wordpress合并长春seo网络优化招聘网
  • 网站开发创业计划书模板福建省建设干部培训中心网站首页
  • 做网站还有开发文档吗长安外贸网站建设
  • 武昌网站建设外贸做双语网站好还是单语网站
  • 做网站推广的技巧青岛seo服务
  • 电商网站设计模板dwwordpress首页点击图片弹出视频
  • 做网站毕设任务书淮北论坛官网
  • 百度收录排名好的网站需要多少钱
  • 光明区建设局网站人气最火的网页游戏
  • 建设专业网站网络本溪网站建设
  • 自己的电脑做服务器 并建网站Wordpress付费主题排名
  • 网站做一些流量互换北京软件外包公司排名
  • 鼓楼微网站开发长沙好的设计公司
  • 网站对联代码贵阳网站制作企业
  • 怎么加入网站做微商城网页设计尺寸怎么算
  • 匀贵网站建设软件应用商店排行榜
  • 电子商务网站建设与维护实验报告手机上怎么修改wordpress