针对问题:提供统一接口访问集合,屏蔽集合内部数据的访问和数据结构。提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示。
迭代器模式的结构图:
迭代器模式的实现代码:
/**
* 迭代接口
* @author bruce
*
*/
public interface Iterator {
public Object first();
public Object next();
public boolean isDone();
public Object currentItme();
}
/**
* 集合抽象类
* @author bruce
*
*/
public abstract class Aggregate {
public abstract Iterator createIterator();
}
/**
* 集合实现类
* @author bruce
*
*/
public class ConcreteAggregate extends Aggregate{
private Object[] objects;
public ConcreteAggregate(Object[] objects){
this.objects=objects;
}
@Override
public Iterator createIterator() {
return new ConcreteIterator(this);
}
/**
* 迭代器应作为集合类的私有内部类来实现。这样可以访问集合,不需要以下接口。
* @return
*/
public Object[] getObjects(){
return objects;
}
}
/**
* 迭代器实现
* @author bruce
*
*/
public class ConcreteIterator implements Iterator{
private ConcreteAggregate aggregate;
private int current=0;
public ConcreteIterator(ConcreteAggregate aggregate){
this.aggregate=aggregate;
}
public Object currentItme() {
return getObjects()!=null && getObjects().length>current?getObjects()[current]:null;
}
public Object first() {
return getObjects()!=null && getObjects().length>0?getObjects()[0]:null;
}
public boolean isDone() {
return getObjects()!=null && getObjects().length>0?current>=getObjects().length:true;
}
public Object next() {
// TODO Auto-generated method stub
return isDone()?null:getObjects()[current++];
}
/**
* 迭代器应该实现在集合内部,不需要些接口
* @return
*/
private Object[] getObjects(){
return aggregate.getObjects();
}
}
/**
* 测试类
* @author bruce
*
*/
public class Client {
public static void main(String[] args) {
Object[] objects=new Object[]{"A","B","C"};
ConcreteAggregate aggregate=new ConcreteAggregate(objects);
Iterator iterator=aggregate.createIterator();
while(!iterator.isDone()){
Object object=iterator.next();
System.out.println(object);
}
/**
* output:
A
B
C
*/
}
}
- 大小: 6.7 KB
分享到:
相关推荐
自定义语言的实现——解释器模式(五) 自定义语言的实现——解释器模式(六) 迭代器模式-Iterator Pattern 遍历聚合对象中的元素——迭代器模式(一) 遍历聚合对象中的元素——迭代器模式(二) 遍历聚合对象中的...
16. **迭代器模式**:提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 17. **中介者模式**:定义一个中介对象来简化原本复杂的对象间交互,使得对象之间松耦合。 18. **备忘录模式**:在不破坏封装性...
- **第 9 章:迭代器模式与组合模式**(页码:15) - 介绍了迭代器模式和组合模式的核心概念。 - 展示了这两种模式在 .NET 应用中的具体实现。 - **第 10 章:状态模式**(页码:17) - 解释了状态模式的工作原理...
- 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会...
3. 行为型模式:这类模式主要关注对象间的交互和责任分配,如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、备忘录模式(Memento...
- 迭代器模式:提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 中介者模式:用一个中介对象封装一系列对象之间的交互,降低它们之间的耦合。 - 观察者模式:定义对象间的一对多依赖关系,当一个...
- 迭代器模式:提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 观察者模式:定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - 状态...
本书还附带了一些基础类库的介绍,例如列表(List)、迭代器(Iterator)、列表迭代器(ListIterator)、点(Point)、矩形(Rect)等,这些都是在实现设计模式时常用的数据结构。 #### 十一、参考文献与索引 **参考文献与...
- 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 中介者模式(Mediator):定义一个中介对象来封装一系列对象之间的交互,降低系统的耦合度。 - 备忘录模式(Memento)...
#### 第9章:良好的集合管理——迭代器模式和组合模式 迭代器模式提供了一种方法来顺序访问聚合对象中的一系列数据,而不暴露其内部表示。组合模式则将对象组织到树形结构中以表示部分整体层次结构,使得客户端可以...
3. 行为型模式:这类模式主要关注对象间如何交互和分配责任,例如责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式...
- **行为型模式**:包括策略模式、模板方法模式、观察者模式、迭代器模式、访问者模式、命令模式、备忘录模式、状态模式、解释器模式等。这些模式侧重于对象间的交互方式。 #### 五、结语 《Head First Design ...
- **行为型模式**:关注对象间的职责分配,如策略模式、模板方法模式、观察者模式、命令模式、迭代器模式、中介者模式、备忘录模式、状态模式、访问者模式和解释器模式。 #### 设计模式的价值 设计模式的价值不仅...
包括:责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式等。 3. **UML(Unified Modeling Language)**: - 定义:统一建模...
迭代器模式提供了一种方法来访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 ##### 3.6 适配器模式 适配器模式将一个类的接口转换成客户希望的另一个接口。适配器让原本由于接口不兼容而不能一起...