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

尼日利亚网站开发网站建设公司地址在哪

尼日利亚网站开发,网站建设公司地址在哪,建网站 发信息 做推广,青海找人做网站多少钱目录 一、迭代器模式介绍 1.1 迭代器模式定义 1.2 迭代器模式原理 1.2.1 迭代器模式类图 1.2.2 模式角色说明 1.2.3 示例代码 二、迭代模式的应用 2.1 需求说明 2.2 需求实现 2.2.1 抽象迭代类 2.2.2 抽象集合类 2.2.3 主题类 2.2.4 具体迭代类 2.2.5 具体集合类 …

目录

一、迭代器模式介绍

1.1 迭代器模式定义

1.2 迭代器模式原理

1.2.1 迭代器模式类图

1.2.2 模式角色说明

1.2.3 示例代码

二、迭代模式的应用

2.1 需求说明

2.2 需求实现

2.2.1 抽象迭代类

2.2.2 抽象集合类

2.2.3 主题类

2.2.4 具体迭代类

2.2.5 具体集合类

2.2.6 测试类

三、迭代器模式总结

3.1 迭代器模式的优点

3.2 迭代器模式的缺点

3.3 迭代器模式的使用场景


一、迭代器模式介绍

1.1 迭代器模式定义

迭代器模式(Iterator pattern)又叫游标(Cursor)模式,它的原始定义是:迭代器提供一种对容器对象中的各个元素进行访问的方法,而又不需要暴露该对象的内部细节。

迭代器模式是我们学习一个设计时很少用到的、但编码实现时却经常使用到的行为型设计模式。在绝大多数编程语言中,迭代器已经成为一个基础的类库,直接用来遍历集合对象。在平时开发中,我们更多的是直接使用它,很少会从零去实现一个迭代器。

在软件系统中,容器对象拥有两个职责:一是存储数据,而是遍历数据。从依赖性上看,前者是聚合对象的基本职责。而后者是可变化的,又是可分离的。因此可以将遍历数据的行为从容器中抽取出来,封装到迭代器对象中,由迭代器来提供遍历数据的行为,这将简化聚合对象的设计,更加符合单一职责原则。

1.2 迭代器模式原理

1.2.1 迭代器模式类图

1.2.2 模式角色说明

迭代器模式主要包含以下角色:

  • 抽象集合(Aggregate)角色:用于存储和管理元素对象, 定义存储、添加、删除集合元素的功能,并且声明了一个createIterator()方法用于创建迭代器对象。
  • 具体集合(ConcreteAggregate)角色:实现抽象集合类,返回一个具体迭代器的实例。
  • 抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含hasNext()、next() 等方法。
  1. hasNext()函数用于判断集合中是否还有下一个元素。
  2. next() 函数用于将游标后移一位元素。
  3. currentItem() 函数,用来返回当前游标指向的元素。
  • 具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法,完成对集合对象的遍历,同时记录遍历的当前位置。

1.2.3 示例代码

package main.java.cn.test.iterator.V1;/*** @author ningzhaosheng* @date 2024/1/15 15:23:06* @description 迭代器接口*/
public interface Iterator<E> {//判断集合中是否有下一个元素boolean hasNext();//将游标后移一位元素void next();//返回当前游标指定的元素E currentItem();
}
package main.java.cn.test.iterator.V1;import java.util.ArrayList;
import java.util.NoSuchElementException;/*** @author ningzhaosheng* @date 2024/1/15 15:23:43* @description 具体迭代器*/
public class ConcreteIterator<E> implements Iterator<E> {//游标private int cursor;//容器private ArrayList<E> arrayList;public ConcreteIterator(ArrayList<E> arrayList) {this.cursor = 0;this.arrayList = arrayList;}@Overridepublic boolean hasNext() {return cursor != arrayList.size();}@Overridepublic void next() {cursor++;}@Overridepublic E currentItem() {if (cursor >= arrayList.size()) {throw new NoSuchElementException();}return arrayList.get(cursor);}
}
package main.java.cn.test.iterator.V1;import java.util.ArrayList;/*** @author ningzhaosheng* @date 2024/1/15 15:25:35* @description 测试类*/
public class Test {public static void main(String[] args) {ArrayList<String> names = new ArrayList<>();names.add("lisi");names.add("zhangsan");names.add("wangwu");Iterator<String> iterator = new ConcreteIterator(names);while (iterator.hasNext()) {System.out.println(iterator.currentItem());iterator.next();}/*** 使用ArrayList集合中的iterator()方法获取迭代器* 将创建迭代器的方法放入集合容器中,这样做的好处是对客户端封装了迭代器的实现细节.*/java.util.Iterator<String> iterator1 = names.iterator();while (iterator1.hasNext()) {System.out.println(iterator1.next());iterator.next();}}
}

二、迭代模式的应用

2.1 需求说明

为了帮助大家更好地理解迭代器模式,下面我还是通过一个简单的例子给大家演示一下

2.2 需求实现

2.2.1 抽象迭代类

package main.java.cn.test.iterator.V2;/*** @author ningzhaosheng* @date 2024/1/15 15:30:18* @description 抽象迭代器 IteratorIterator*/
public interface IteratorIterator<E> {//重置为第一个元素void reset();//获取下一个元素E next();//检索当前元素E currentItem();//判断是否还有下一个元素存在boolean hasNext();
}

2.2.2 抽象集合类

package main.java.cn.test.iterator.V2;/*** @author ningzhaosheng* @date 2024/1/15 15:31:11* @description 抽象集合类*/
public interface ListList<E> {//获取迭代器对象的抽象方法(面向接口编程)IteratorIterator<E> Iterator();
}

2.2.3 主题类

package main.java.cn.test.iterator.V2;/*** @author ningzhaosheng* @date 2024/1/15 15:31:52* @description 主题类*/
public class Topic {private String name;public Topic(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

2.2.4 具体迭代类

package main.java.cn.test.iterator.V2;/*** @author ningzhaosheng* @date 2024/1/15 15:32:22* @description 具体迭代类*/
public class TopicIterator implements IteratorIterator<Topic> {//Topic数组private Topic[] topics;//记录存储位置private int position;public TopicIterator(Topic[] topics) {this.topics = topics;position = 0;}@Overridepublic void reset() {position = 0;}@Overridepublic Topic next() {return topics[position++];}@Overridepublic Topic currentItem() {return topics[position];}@Overridepublic boolean hasNext() {if (position >= topics.length) {return false;}return true;}
}

2.2.5 具体集合类

package main.java.cn.test.iterator.V2;/*** @author ningzhaosheng* @date 2024/1/15 15:33:55* @description 具体集合类*/
public class TopicList implements ListList<Topic> {private Topic[] topics;public TopicList(Topic[] topics) {this.topics = topics;}@Overridepublic IteratorIterator<Topic> Iterator() {return new TopicIterator(topics);}
}

2.2.6 测试类

package main.java.cn.test.iterator.V2;/*** @author ningzhaosheng* @date 2024/1/15 15:35:00* @description 测试类*/
public class Test {public static void main(String[] args) {Topic[] topics = new Topic[4];topics[0] = new Topic("topic1");topics[1] = new Topic("topic2");topics[2] = new Topic("topic3");topics[3] = new Topic("topic4");TopicList topicList = new TopicList(topics);IteratorIterator<Topic> iterator = topicList.Iterator();while (iterator.hasNext()) {Topic t = iterator.next();System.out.println(t.getName());}}
}

三、迭代器模式总结

3.1 迭代器模式的优点

  • 迭代器模式支持以不同方式遍历一个集合对象,在同一个集合对象上可以定义多种遍历方式。 在迭代器模式中只需要用一个不同的迭代器来替换原有的迭代器,即可改变遍历算法,也可以自己定义迭代器的子类以支持新的遍历方式。
  • 迭代器简化了集合类。由于引入了迭代器,在原有的集合对象中不需要再自行提供数据遍历等方法,这样可以简化集合类的设计。
  • 在迭代器模式中,由于引入了抽象层,增加新的集合类和迭代器类都很方便,无须修改原有代码,满足 "基于接口编程而非实现" 和 "开闭原则" 的要求。

3.2 迭代器模式的缺点

  • 由于迭代器模式将存储数据和遍历数据的职责分离,增加了类的个数,这在一定程度上增加了系统的复杂性。
  • 抽象迭代器的设计难度较大,需要充分考虑到系统将来的扩展。

3.3 迭代器模式的使用场景

  • 减少程序中重复的遍历代码。

对于放入一个集合容器中的多个对象来说,访问必然涉及遍历算法。如果我们不将遍历算法封装到容器里(比如,List、Set、Map 等),那么就需要使用容器的人自行去实现遍历算法,这样容易造成很多重复的循环和条件判断语句出现,不利于代码的复用和扩展,同时还会暴露不同容器的内部结构。而使用迭代器模式是将遍历算法作为容器对象自身的一种“属性方法”来使用,能够有效地避免写很多重复的代码,同时又不会暴露内部结构。

  • 当需要为遍历不同的集合结构提供一个统一的接口时或者当访问一个集合对象的内容而无须暴露其内部细节的表示时。

迭代器模式把对不同集合类的访问逻辑抽象出来,这样在不用暴露集合内部结构的情况下,可以隐藏不同集合遍历需要使用的算法,同时还能够对外提供更为简便的访问算法接口。

好了,本次分享就到这里,欢迎大家继续阅读《设计模式》专栏其他设计模式内容,如果有帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

http://www.ritt.cn/news/6684.html

相关文章:

  • 资深的教育行业网站开发上海搜索引擎优化公司排名
  • 福州市城乡建设委员会网站百度开放云平台
  • 哪里有做阿里网站的网站制作策划书
  • 网站空间如何买seo的基本步骤包括哪些
  • html 路径 网站根路径如何查询百度收录
  • 做创业网站赚钱三只松鼠的软文范例
  • 如何利用模板做网站北京seo排名收费
  • 自己的网站如何给别人做有偿广告如何制作一个属于自己的网站
  • 济南网站改版近期时事新闻
  • 网站后台代码在线域名ip查询
  • 做电音的软件的专业下载网站百度网站打不开
  • wordpress 代替seo文案范例
  • 廊坊seo建站武汉大学人民医院光谷院区
  • 整站优化方案百度 个人中心首页
  • 网站上添加图片的原则广告网站建设网站排名优化
  • asp程序设计做网站seo整站优化外包公司
  • 做外贸都有哪些好网站教程推广优化网站排名
  • 微信微网站开发淘宝宝贝排名查询
  • 聊城高端网站建设网络推广员的前景
  • 长沙专业网站制作培训行业seo整站优化
  • 给小公司做网站赚钱么上海营销seo
  • 外贸网站做几种产品济宁百度竞价推广
  • 荣耀手机商城官方网站下载新媒体运营主要做什么
  • 博客网站开发思维导图cms快速建站
  • 聊城哪里有做网站的百度账号怎么注销
  • 杭州网站建设V芯ee8888e上海今日头条新闻
  • 商业网站页面自己做网站的软件
  • 日本vtuber在b站的钱查排名
  • 溜冰后做爰在线网站网站应该如何进行优化
  • 免费招聘网站建设百度搜索排名服务