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

网站图片一般的像素企业网站需要多大空间

网站图片一般的像素,企业网站需要多大空间,wordpress is_user_logged_in,网站后台如何更改1. 迭代器模式介绍迭代器模式(Iterator Pattern)是一种行为设计模式,旨在提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。这个模式的主要目的是将集合的遍历与集合本身分离,使得用户可…

1. 迭代器模式介绍

迭代器模式(Iterator Pattern)是一种行为设计模式,旨在提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。这个模式的主要目的是将集合的遍历集合本身分离,使得用户可以遍历不同类型的集合对象。

类比场景:想象一下,你有一本书(集合),而你想要阅读这本书的每一页(元素)。迭代器就像一个书签,它帮助你从第一页开始,逐页翻阅,直到最后一页,而不需要直接去操控书本结构。

组成结构:迭代器模式通常包括以下几个组件:

  1. Iterator(迭代器接口):定义访问和遍历元素的接口,通常包含next()hasNext()等方法。
  2. ConcreteIterator(具体迭代器):实现迭代器接口,负责具体的遍历逻辑。
  3. Aggregate(聚合接口):定义创建迭代器的接口,通常包含一个方法createIterator()
  4. ConcreteAggregate(具体聚合类):实现聚合接口,提供集合元素的存储。

优缺点分析

  • 优点
    • 单一职责原则:迭代器模式将集合元素的遍历逻辑与集合本身的存储分离。这对于复杂数据结构非常有用,比如树或图的遍历比较复杂,如果由客户端编写遍历算法会增加开发成本;如果将遍历算法放到集合容器类中,会增加容器代码的复杂性;此时将复杂的遍历算法单独抽出来放到迭代器类中是一个比较好的选择。
    • 开闭原则:可以在不修改集合的情况下添加新的遍历算法。以图数据结构为例,业务默认使用的是深度优先遍历(使用DFSIterator迭代器),现在需要改用广度优先遍历算法,只需要新增一个广度优先遍历迭代器(BFSIterator),客户端将迭代器从DFSIterator修改为BFSIterator即可,其他代码都不用改动。
    • 简化客户端代码:客户端可以使用同样的接口遍历不同的集合对象。迭代器提供了抽象的接口(Iterator),不同的集合对象实现各自的具体迭代器(链表迭代器LinkedIterator,图迭代器BFSIterator等),用户只需使用Iterator接口就能访问不同类型的集合对象。
  • 局限性
    • 额外开销:对于简单的集合结构,使用迭代器模式可能会增加不必要的开销。
    • 复杂性:对于非常简单的集合,直接使用循环可能更加简单和高效。

适合场景:

  • 当你需要对一个聚合对象进行多种不同的遍历方式。
  • 当你需要为不同类型的聚合对象提供统一的遍历接口。

2. 代码演示

场景:模拟书本的阅读器(迭代器),顺序翻阅一本书(聚合类)的各个书页(元素)。

Iterator(迭代器接口)

// 迭代器接口:定义访问和遍历元素的接口,通常包含next()、hasNext()等方法
public interface Iterator<T> {//判断是否还有待遍历元素boolean hasNext();//游标移到下一个待遍历的元素,并返回当前元素T next();
}

ConcreteIterator(具体迭代器):

// 具体迭代器类:实现迭代器接口,负责具体的遍历逻辑。
public class BookIterator implements Iterator<String> {private final List<String> pages;private int position = 0;public BookIterator(List<String> pages) {this.pages = pages;}@Overridepublic boolean hasNext() {return position < pages.size();}@Overridepublic String next() {if (hasNext()) {// 返回当前元素,并移动到下一个元素return pages.get(position++);}return null;}
}

Aggregate(聚合接口):

// 聚合接口:定义创建迭代器的接口,通常包含一个方法createIterator()
public interface Aggregate<T> {Iterator<T> createIterator();
}

ConcreteAggregate(具体聚合类):

//具体聚合类:实现Aggregate接口以创建具体迭代器实例,提供集合元素的存储
public class BookCollection implements Aggregate<String> {private final List<String> pages = new ArrayList<>();public void addPage(String page) {pages.add(page);}@Overridepublic Iterator<String> createIterator() {return new BookIterator(pages);}
}

客户端代码:

public class IteratorClientDemo {public static void main(String[] args) {// 创建具体聚合对象BookCollection bookCollection = new BookCollection();bookCollection.addPage("page1:Introduction");bookCollection.addPage("page2:Chapter 1");bookCollection.addPage("page3:Chapter 2");Iterator<String> iterator = bookCollection.createIterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

对应的类图:

http://www.dtcms.com/a/405976.html

相关文章:

  • 做网站需要给设计提供专业的商城网站开发
  • 《Spring MVC奇幻漂流记:当Java遇上Web的奇妙冒险》
  • 前端性能优化,给录音播放的列表加个播放按键,点击之后再播放录音。减少页面的渲染录音文件数量过多导致加载缓慢
  • uniapp中封装底部跳转方法
  • Kafka-保证消息消费的顺序性及高可用机制
  • 通过kafka-connect 实现debezium数据监听采集
  • GTSAM 中自定义因子(Custom Factor)的详解和实战示例
  • 要建一个网站怎么做老板合作网站开发
  • 【Linux基础知识系列:第一百三十九篇】使用Bash编写函数提升脚本功能
  • 【MyBatis-Plus 动态数据源的默认行为】
  • GaussDB 和 openGauss 怎么区分?
  • 云服务器里的IP是什么意思,他们之间有什么关系?
  • @Transactional 事务注解
  • PaddleLabel百度飞桨Al Studio图像标注平台安装和使用指南(包冲突 using the ‘flask‘ extra、眼底医疗分割数据集演示)
  • 锦州网站建设工作如何快速网络推广
  • 科技网站建设公司wordpress必做
  • Webpack5 第二节
  • npm、pnpm、npx 三者的定位、核心差异和「什么时候该用谁」
  • 在 C# .NETCore 中使用 MongoDB(第 2 部分):使用过滤子句检索文档
  • AWS Quicksight实践:从零到可视化分析
  • 微服务注册中心 Spring Cloud Eureka是什么?
  • websocket链接
  • 【oceanbase】Oracle模式查看pl慢sql
  • 电子商务网站规划的流程网站备案申请模板
  • 旺道网站优化公众号怎么推广
  • 内存卡标识全解析:从存储到性能的密码
  • 动态的魔法:列表与条件渲染
  • 乐清联科网站建设wordpress divi 数据
  • ARM单片机中断及中断优先级管理详解
  • python软件操作