迭代器模式-Iterator(Java实现)
2018-06-18 01:27:01来源:未知 阅读 ()
迭代器模式-Iterator
用于访问一个集合中的各个元素, 而又不会暴露集合的内部的细节.
迭代器接口
统一定义了迭代器该有的方法.
hasNext() 用于判断是否还有下一个元素
next() 用于返回下一个元素, 并且使内部计数器+1
/**
* 迭代器接口
*/
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
用于生成迭代器的接口
/**
* 该接口中只有一个方法, 这个方法用于生成一个迭代器, 并返回
* <p>
* 如果某个集合想使用迭代器, 那么就就应该实现这个接口
*/
public interface Aggregate {
public abstract Iterator iterator();
}
元素类
本例子中举的是"猫群组"中利用迭代器来遍历每一只猫
所以在创建猫群组之前, 先把"猫类" 定义好
/**
* Cat是个体, 一个Cat实例代表一只猫.
* CatGroup是Cat的集合, 一个CatGroup实例代表一群猫.
*/
public class Cat {
private int age;
private String name;
public Cat(String name, int age) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
}
集合类
接下来创建"猫群组"类
猫群组类想要使用迭代器的话, 需要先实现Aggregate接口的iterator()方法, 来获提供群组的迭代器.
/**
* Cat是个体, 一个Cat实例代表一只猫.
* CatGroup是Cat的集合, 一个CatGroup实例代表一群猫.
*
* 并且这个类实现了Aggregate的iterator()方法来获取迭代器
*/
public class CatGroup implements Aggregate {
private int last;
private Cat[] cats;
public CatGroup(int maxsize) {
this.cats = new Cat[maxsize];
}
public Cat getByIndex(int index) {
return cats[index];
}
public void append(Cat cat) {
cats[last++] = cat;
}
public int getLength() {
return last;
}
@Override
public Iterator iterator() {
return new CatGroupIterator(this);
}
}
集合迭代器类
接下来介绍猫群组的迭代器.
hasNext() 用于判断猫群组里是否还有下一只猫. 如果 index 小于 猫群组中猫的个数, 那么肯定有下一只; 否则, 肯定没有下一只猫, 表示已经遍历完所有猫了
next()方法负责直接返回"下一只猫" 并且把计数器+1.
public class CatGroupIterator implements Iterator {
private int index;
private CatGroup catGroup;
public CatGroupIterator(CatGroup catGroup) {
this.catGroup = catGroup;
this.index = 0;
}
@Override
public boolean hasNext() {
return index < catGroup.getLength();
}
@Override
public Object next() {
return catGroup.getByIndex(index++);
}
}
测试
public class Main {
public static void main(String[] args) {
// 创建一个猫群
CatGroup catGroup = new CatGroup(20);
// 向猫群里添加猫
catGroup.append(new Cat("betty", 10));
catGroup.append(new Cat("nancy", 11));
catGroup.append(new Cat("wood", 14));
catGroup.append(new Cat("zira", 18));
// 获取遍历该猫群的迭代器
Iterator iterator = catGroup.iterator();
// 迭代并输出
while (iterator.hasNext()) {
Cat c = (Cat) iterator.next();
System.out.println(c);
}
}
}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:mybatis入门
- 设计模式-委派/策略模式 2020-06-09
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 设计模式---类之间的关系知多少 2020-06-07
- 你与面试官所了解的单例模式并不一样! 2020-06-06
- 高手眼中的观察者模式有什么不一样 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
