设计模式详解——迭代器模式
时间:2021-10-23
本文章向大家介绍设计模式详解——迭代器模式,主要包括设计模式详解——迭代器模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
今天我们要学习的这个设计模式,我们其实在日常开发中也经常用到,但也仅仅只是用过,所以很多时候我都不觉得它是一种设计模式,它就是迭代器模式,由于这个设计模式比较简单,所以关于它我们能讲的内容也不多,因此呢,今天的内容也就比较少。
迭代器模式
迭代器模式(Iterator Pattern
)是 Java
和 .Net
编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
迭代器模式提供了一种方法顺序,访问一个聚合对象中的各个元素,而又不暴露其内部具体实现细节
要点
- 迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露其内部的实现细节
- 把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所
应用
关于迭代器模式,用的最多的当然就是java
容器部分的相关内容,比如Collection
接口。这里我们通过一个简易的手写容器,来演示它具体的应用场景。
适配器接口
首先是迭代器的接口,它有两个方法,一个用于判断容器是否包含元素;另一个用于拿出容器中的当前角标最小的元素(默认为为0
)
public interface Iterator {
boolean hasNext();
Object next();
}
容器接口
然后是容器接口,容器接口只有一个方法,就是获取迭代器。
public interface Container {
Iterator getIterator();
}
容器实现
容器的内部实现包括了迭代器的实现
public class SyskeContainer implements Container {
public Object[] values = {"云中志" , "java" ,"志哥" , "syske"};
@Override
public Iterator getIterator() {
return new SyskeIterator();
}
private class SyskeIterator implements Iterator {
int index;
@Override
public boolean hasNext() {
if(index < values.length){
return true;
}
return false;
}
@Override
public Object next() {
if(this.hasNext()){
return values[index++];
}
return null;
}
}
}
测试代码
下面的测试代码也很简单,就是获取SyskeContainer
的迭代器,然后通过它的迭代器,实现对SyskeContainer
容器的遍历操作:
public class SyskeContainerTest extends TestCase {
public void testIterator() {
SyskeContainer syskeContainer = new SyskeContainer();
Iterator iterator = syskeContainer.getIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
运行结果如下:
总结
从上面的内容以及我们的代码中其实可以看出来,相比于我们前面讲到的设计模式,迭代器的内容就显得比较少,而且比较简单,更重要的是,它的应用场景也很窄,基本上都是集中在批量操作的业务中,所起的作用就是代替具体的容器,实现遍历操作,然后实现具体容器与业务之间的耦合关系。
原文地址:https://www.cnblogs.com/caoleiCoding/p/15449799.html
- Spring实战——缓存
- 今天,微信紧急发布小程序最强入口!这3项新能力堪称年度豪礼!
- Python基础知识梳理-第01部分
- 卷积神经网络之卷积操作
- Silverlight体积优化
- 江湖秘笈:说烦了破解、渗透等,不如大家一起聊聊硬盘加密?
- Nodejs学习笔记(十三)— PM2
- 十分钟带你了解服务化框架
- 十分钟带你了解服务化框架
- WCF技术剖析之十七:消息(Message)详解(上篇)
- 微信年底重磅更新,这次小程序才是重头戏!
- 《EnterLib PIAB深入剖析》系列博文汇总
- Nodejs学习笔记(八)--- Node.js + Express 实现上传文件功能(felixge/node-formidable)
- 大牛教你使用7种卷积神经网络进行物体检测!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法