【Java中23种面试常考的设计模式之迭代器模式(Iterator)---行为型模式】
知识回顾:
>
之前我们讲过的设计模式在这里呦:
【面试最常见的设计模式之单例模式】
【面试最常见的设计模式之工厂模式】
【Java中23种面试常考的设计模式之备忘录模式(Memento)---行为型模式】
【Java中23种面试常考的设计模式之观察者模式(Observer)---行为型模式】
【Java中23种面试常考的设计模式之模板模式(Template)---行为型模式】
【Java中23种面试常考的设计模式之状态模式(State)---行为型模式】
【Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式】
接下来我们要进行学习的是:【Java中23种面试常考的设计模式之迭代器模式(Iterator)---行为型模式】。
迭代器模式
迭代器设计模式:用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
解决的问题
不同的方式来遍历整个整合对象。
应用策略模式的场景
遍历一个集合中的所有元素。
生产开发中常用的使用场景
- Java中JDK自带的遍历集合元素的迭代器。
迭代器模式优点与缺点
优点
- 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
缺点
由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
核心角色
Iterator 接口和一个返回迭代器的 Aggregate接口。实现了 Aggregate接口的实体类将负责实现 Iterator 接口。迭代器主要是遍历对象,聚合接口主要是存储对象。
UML类图
实现代码
我们举一个常见的栗子吧:就是遍历一个集合中的所有元素。
Iterator 接口
package com.iterator;
public interface MyIterator{
public boolean hasNext();
public Object next();
}
Aggregate接口
package com.iterator;
public interface Aggregate{
public MyIterator getIterator();
}
返回Iterator具体的Aggregate类
package com.iterator;
import java.util.List;
import java.util.ArrayList;
public class ConcreteAggregate implements Aggregate{
private List<Object> list = new ArrayList<Object>();
public void addObject(Object obj){
this.list.add(obj);
}
public void removeObject(Object obj){
this.list.remove(obj);
}
@Override
public MyIterator getIterator() {
return new ConcreteIterator();
}
private class ConcreteIterator implements MyIterator{
//记录遍历的位置
private int index;
@Override
public boolean hasNext() {
if(index < list.size()){
return true;
}
return false;
}
@Override
public Object next() {
if(this.hasNext()){
return list.get(index++);
}
return null;
}
}
}
测试代码
package com.iterator;
public class Main{
public static void main(String[] args) {
ConcreteAggregate aggregate= new ConcreteAggregate();
aggregate.addObject("Java");
aggregate.addObject("Python");
aggregate.addObject("C++");
MyIterator iterator=aggregate.getIterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
运行结果展示:
好了,到这里【Java中23种面试常考的设计模式之迭代器模式(Iterator)---行为型模式】就结束了,23种设计模式持续更新汇总中。