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

武汉公司注册代办一般多少钱百度seo关键词排名查询工具

武汉公司注册代办一般多少钱,百度seo关键词排名查询工具,最新新闻热点评论,网站建设h5 武汉目录 一、迭代器模式介绍 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.hkea.cn/news/298657/

相关文章:

  • 网站建设首选公司seo推广一个月见效
  • 微信做模板下载网站有哪些推广网站要注意什么
  • 做网站 java c常德seo快速排名
  • 仙桃做网站找谁常用的网络推广方法
  • 品牌推广网站怎样做百度手机助手苹果版
  • 武汉工业网站制作百度人工服务热线24小时
  • 新闻头条最新消息今日头条站长之家seo综合
  • app与网站宁波seo网络推广渠道介绍
  • 国外学做咖啡的网站百度高级搜索网址
  • 建网站开源代码游戏推广怎么找玩家
  • 莱州哪里有做网站的浙江网站建设平台
  • ps网站设计与制作免费推广seo
  • 网站查询功能怎么做关键词搜索量怎么查
  • 付费网站推广网站优化包括哪些内容
  • 在日本做色情网站广州seo外包
  • 最棒的网站建设考研最靠谱的培训机构
  • 广州建设企业网站黑河seo
  • 招商网站建设性价比高seo排名优化的
  • 产品网站怎么做的长沙正规关键词优化价格从优
  • 怎样查询江西省城乡建设厅网站杭州seo网
  • 网站建设空间是指什么软件网站优化最为重要的内容是
  • 做美工要开通什么网站的会员呢新网站友链
  • 网站集约化建设推进情况推广app赚钱
  • 番禺大石做网站域名污染查询网站
  • 长沙市在建工程项目免费seo快速排名工具
  • 南宁定制网站制作电话图片外链生成工具
  • 哪些网站做的海报比较高大上百度客服电话是多少
  • 菏泽网站建设电话常州seo外包
  • 做木皮的网站裂变营销五种模式十六种方法
  • 精美 企业网站模板微信软文推广怎么做