行为模式3.迭代器模式
行为型模式[*]模板方法模式(Template Method Pattern)
[*]下令模式(Command Pattern)
[*]迭代器模式(Iterator Pattern)
[*]观察者模式(Observer Pattern)
[*]中介者模式(Mediator Pattern)
[*]备忘录模式(Memento Pattern)
[*]表明器模式(Interpreter Pattern)
[*]状态模式(State Pattern)
[*]战略模式(Strategy Pattern)
[*]职责链模式(Chain of Responsibility Pattern)
[*]访问者模式(Visitor Pattern)
迭代器模式(Iterator Pattern) 是一种行为型设计模式,它提供一种次序访问聚集对象元素的方式,而不暴露聚集的内部结构。迭代器模式允许客户端按次序访问聚集中的元素,而无需直接访问聚集本身。通常,当你有一个聚集(如列表、队列、栈等),你盼望对聚集中的元素进行迭代,但又不想暴露其内部结构时,可以使用迭代器模式。
迭代器模式的主要组成部分
[*]Iterator(迭代器):迭代器接口,界说了遍历聚集元素的方法,如 hasNext() 和 next()。
[*]ConcreteIterator(具体迭代器):实现了Iterator接口,并界说了怎样遍历具体聚集中的元素。
[*]Aggregate(聚合类,也叫聚集类):聚集接口,提供创建迭代器对象的方法。
[*]ConcreteAggregate(具体聚合类):实现了Aggregate接口,界说了怎样存储和获取聚集元素。
迭代器模式的工作流程
[*]创建迭代器:客户端通过聚合类获取迭代器实例。
[*]遍历聚集:客户端通过迭代器的方法遍历聚集中的元素,使用 hasNext() 判定是否有下一个元素,使用 next() 获取当前元素。
[*]不暴露聚集的内部实现:迭代器模式让客户端可以或许通过标准的接口访问聚集元素,而不需要知道聚集的内部结构。
迭代器模式的长处
[*]封装性:聚集的实现细节对客户端是隐蔽的,客户端不需要关心聚集怎样存储数据。
[*]灵活性:可以对不同的聚集范例使用雷同的迭代方式。
[*]单一职责:聚合类负责存储数据,迭代器类负责遍历数据,这样做可以避免聚集类本身过于复杂。
Java 示例代码
import java.util.ArrayList;
import java.util.List;
// 1. 定义Iterator接口
interface Iterator {
boolean hasNext();// 判断是否有下一个元素
Object next(); // 获取下一个元素
}
// 2. 定义Aggregate接口(集合接口)
interface Aggregate {
Iterator createIterator();// 创建一个迭代器
}
// 3. ConcreteIterator(具体迭代器)实现Iterator接口
class ConcreteIterator implements Iterator {
private List<Object> items;
private int position = 0;
public ConcreteIterator(List<Object> items) {
this.items = items;
}
@Override
public boolean hasNext() {
return position < items.size();
}
@Override
public Object next() {
if (this.hasNext()) {
return items.get(position++);
}
return null;
}
}
// 4. ConcreteAggregate(具体集合类)实现Aggregate接口
class ConcreteAggregate implements Aggregate {
private List<Object> items = new ArrayList<>();
public void addItem(Object item) {
items.add(item);
}
@Override
public Iterator createIterator() {
return new ConcreteIterator(items);
}
}
// 5. 客户端使用迭代器遍历集合
public class IteratorPatternDemo {
public static void main(String[] args) {
// 创建一个具体的集合
ConcreteAggregate aggregate = new ConcreteAggregate();
aggregate.addItem("Item 1");
aggregate.addItem("Item 2");
aggregate.addItem("Item 3");
aggregate.addItem("Item 4");
// 创建迭代器
Iterator iterator = aggregate.createIterator();
// 使用迭代器遍历集合
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]