迭代器模式(Iterator Pattern)
1.策略模式(Strategy Pattern)2.桥接模式(Bridge Pattern)3.代理模式(Proxy Pattern)4.中介者模式(Mediator Pattern)5.过滤器模式(Filter Pattern)6.适配器模式(Adapter Pattern)7.责任链模式(Chain Of Responsibility Pattern)8.装饰器模式(Decorator Pattern)9.建造者模式(Builder Pattern)10.观察者模式(Observer Pattern)11.工厂模式(Factory Pattern)12.单例模式(Singleton Pattern)13.组合模式(Composite Pattern)14.模板模式(Template Pattern)15.原型模式(Prototype Pattern)16.外观模式(Facade Pattern)17.享元模式(Flyweight Pattern)18.命令模式(Command Pattern)19.解释器模式(Interpreter Pattern)
20.迭代器模式(Iterator Pattern)
迭代器模式(Iterator Pattern)
一、定义
提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。
二、优缺点
优点: 1、它支持以不同的方式遍历一个聚合对象。 2、迭代器简化了聚合类。 3、在同一个聚合上可以有多个遍历。 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
缺点: 1、由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
三、具体实现
3.1 原型图

- Iterator(迭代器):迭代器定义访问和遍历元素的接口。
- ConcreteIterator(具体迭代器):具体迭代器实现迭代器接口,对该聚合遍历时跟踪当前位置。
- Aggregate(聚合):聚合定义创建相应迭代器对象的接口。
- ConcreteAggregate(具体聚合):具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。
3.2 实现
1、创建接口:
/**
* @author zhongtao
* @date 2023/6/17 18:48
*/
public interface Iterator {
public boolean hasNext();
public Object next();
}
/**
* @author zhongtao
* @date 2023/6/17 18:48
*/
public interface Container {
public Iterator getIterator();
}
2、创建实现了 Container 接口的实体类。该类有实现了 Iterator 接口的内部类 NameIterator。
/**
* @author zhongtao
* @date 2023/6/17 18:48
*/
public class NameRepository implements Container {
public String[] names = {"1" , "1" ,"1" , "1"};
@Override
public Iterator getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator {
int index;
@Override
public boolean hasNext() {
if(index < names.length){
return true;
}
return false;
}
@Override
public Object next() {
if(this.hasNext()){
return names[index++];
}
return null;
}
}
}
3、使用 NameRepository 来获取迭代器,并打印名字。
/**
* @author zhongtao
* @date 2023/6/17 18:49
*/
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for (Iterator iter = namesRepository.getIterator(); iter.hasNext(); ) {
String name = (String) iter.next();
System.out.println("Name : " + name);
}
}
}
4、执行程序,输出结果:
Name : 1
Name : 2
Name : 3
Name : 4
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类