设计模式02迭代器(java)
先贴代码,有空来写内容。
1.定义集合
import java.util.List;
import java.util.ArrayList;
//coollection是我自己定义的一个集合,因为要写迭代器,得有个迭代的对象啊。
class coollection<Object>{
//coollection的数据存储在一个ArrayList里
private List<Object> data = new ArrayList<Object>();
//index用于记录当前将迭代元素的下标
private int index = 0;
//给集合添加元素
public void add(Object o){
data.add(o);
}
//获取index
public int getCurrent(){
return index;
}
//获取集合规模
public int size(){
return data.size();
}
//获取一个元素并将索引指向下一个元素
public Object get(){
return data.get(index++);
}
//删除已经被迭代的最后一个元素
public void remove(){
if(index != 0)
data.remove(index-1);
}
//获取coollection的迭代器
public iterator getiterator(){
index = 0;
return new coollectionItrator(this);
}
}
2.写迭代器
//迭代器接口,所有迭代器都要实现这个接口的所有功能
interface iterator{
public boolean hasNext();
public Object next();
public void remove();
}
//coollection集合的专属迭代器,实现了iterator
class coollectionItrator implements iterator{
//定义该迭代器要操作的集合 dataSrc
coollection<Object> dataSrc;
//初始化集合
public coollectionItrator(coollection c){
dataSrc = c;
}
//重写hasNext()
@Override
public boolean hasNext(){
return dataSrc.size() > dataSrc.getCurrent();
}
//重写next()
@Override
public Object next(){
return dataSrc.get();
}
//重写remove()
@Override
public void remove(){
dataSrc.remove();
}
}
3.测试迭代器
// 测试迭代器
public class iteratorDemo{
public static void main(String[] args){
//new 一个集合,将三个实例放进集合里
coollection<Student> stu = new coollection<Student>();
stu.add(new Student("singleDog","man","18"));
stu.add(new Student("singleDoge","feman","19"));
stu.add(new Student("0.0","feman","20")); //获取集合stu的迭代器
iterator it = stu.getiterator();
//遍历集合并输出元素
while(it.hasNext()){
System.out.println(it.next());
}
// 测试迭代器的remove功能
it.remove();
System.out.println("删除后:");
it = stu.getiterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
设计模式02迭代器(java)的更多相关文章
- 23种设计模式全解析 (java版本)
转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...
- Python进阶:设计模式之迭代器模式
在软件开发领域中,人们经常会用到这一个概念——“设计模式”(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一本圣经级的书籍<设计模式:可复用面向对象软件的基础 ...
- 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)
设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...
- 实践GoF的设计模式:迭代器模式
摘要:迭代器模式主要用在访问对象集合的场景,能够向客户端隐藏集合的实现细节. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:迭代器模式>,作者:元闰子. 简介 有时会遇到这 ...
- 从设计模式说起JAVA I/O流
从设计模式说起JAVA I/O流 之前写过一篇I/O流的入门介绍,直到最近看了设计模式,顺带理下I/O流的设计思路. JAVA类库中的I/O类分成输入和输出两部分,通过继承,任何自InputStrea ...
- 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)
原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...
- python设计模式之迭代器与生成器详解(五)
前言 迭代器是设计模式中的一种行为模式,它提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.python提倡使用生成器,生成器也是迭代器的一种. 系列文章 python设计模 ...
- iOS设计模式(02):单例模式
iOS设计模式(02):单例模式 singleton-design-pattern 什么是单例模式? 单例模式是一个类在系统中只有一个实例对象.通过全局的一个入口点对这个实例对象进行访问.在iOS开发 ...
- js设计模式——4.迭代器模式
js设计模式——4.迭代器模式 代码演示 /*js设计模式——迭代器模式*/ class Iterator { constructor(container) { this.list = contain ...
随机推荐
- Canvas讲解
1.Canvas是什么? 简单地说canvas是画布,可以进行画任何的线.图形.填充等一系列的操作,而且操作的画图就是js, 提供简单的二维矢量绘图. 2.步骤: <canvas id=&quo ...
- css样式之background详解
background用法详解: 1.background-color 属性设置元素的背景颜色 可能的值 color_name 规定颜色值为颜色名称的背景颜色(比如 red) he ...
- 编译器开发系列--Ocelot语言3.类型名称的消解
"类型名称的消解"即类型的消解.类型名称由TypeRef 对象表示,类型由Type 对象表示.类型名称的消解就是将TypeRef 对象转换为Type 对象. TypeResolve ...
- A/B Testing的简要知识
A/B testing主要用来检测网站或者APP的两个版本中哪一个更好,它的中心思想是把流量一分为二,一份用作experiment group,访问新的版本,另一份用作control group,访问 ...
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建
公司在IDC机房有两台很高配置的服务器,计划在上面部署openstack云平台虚拟化环境,用于承载后期开发测试和其他的一些对内业务.以下对openstack的部署过程及其使用做一详细介绍,仅仅依据本人 ...
- Ubuntu14.04配置Mono+Jexus
总所周知,ASP.NET是微软公司的一项技术,是一个网站服务端开发的一种技术,它可以在通过HTTP请求文档时再在Web服务器上动态创建它们,就是所谓动态网站开发,它依赖运行于 IIS 之中的程序 .但 ...
- [PHP源码阅读]strtolower和strtoupper函数
字符串的操作函数中,字符串的大小写转换也算是比较常用的函数,其底层实现也比较简单,下面来一探究竟. 我在github上有对PHP源码更详细的注解.感兴趣的可以围观一下,给个star.PHP5.4源码注 ...
- Lesson 18 He often does this!
Text After I had had lunch at a village pub, I looked for my bag. I had left it on a chair beside th ...
- RabbitMQ的安装过程
原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com 网上一些安装教程都较为繁琐,实际上只需要两个RPM包,几分钟即可完成一台实例部署. 准备下载Erlang包: ht ...
- .NET 基础一步步一幕幕[out、ref、params]
out.ref.params out: 如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组. 但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候, 我们可以考虑使用 ...