针对问题:提供统一接口访问集合,屏蔽集合内部数据的访问和数据结构。提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示。
迭代器模式的结构图:
迭代器模式的实现代码:
/**
* 迭代接口
* @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 遍历聚合对象中的元素——迭代器模式(一) 遍历聚合对象中的元素——迭代器模式(二) 遍历聚合对象中的...
23种设计模式(Design Pattern)的C++...迭代器模式(Iterator) 中介者模式(Mediator) 备忘录模式(Memento) 观察者模式(Observer) 状态模式(State) 策略模式(Strategy) 模板方法模式(Template Method) 访问者模式(Visitor)
DesignPattern_BasicKnowledge设计模式之类关系:设计模式 类关系 基础 依赖 关联
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
C++ 23种设计模式(全_解释+源代码).zip 23种设计模式都是基于以下原则,务必记牢 依赖倒转原则 里氏代换原则 开闭原则 接口隔离原则 合成聚合复用原则 迪米特法则 23种设计模式如下:
本书已经成为面向对象技术人员的圣经和词典,书中定义的23个模式逐渐成为开发界技术交流所必备的基础知识和语汇。
DesignPattern 设计模式,共10章。内容详细,案例设计齐全。对设计可复用的面向对象的软件很有帮助,有助你写出又质量,并且可重复使用的高品质软件
ios平台下迭代器模式最初简代码讲解何为迭代器模式,相关博客http://blog.sina.com.cn/s/blog_161d504630102wxis.html
JAVA design pattern-java设计模式.chm
Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 Design Pattern: Singleton...
Design*Pattern*Framework*4.5
深入浅出设计模式 (Head First Design Pattern)_带书签 深入浅出设计模式 (Head First Design Pattern)_带书签
除了使用文法规则来定义一个语言,在解释器模式中还可以通过一种称之为抽象语法树(Abstract Syntax Tree, AST)的图形方式来直观地表示语言的构
Mobile Design Pattern Gallery : UI Patterns for Mobile Applications原版 全彩 120M大容量《移动应用ui设计模式》是一本移动应用ui 设计模式参考书,分10 大类介绍了70 个移动应用设计模式(包括反模式),用400 ...
Theresa Neil's new book "Mobile Design Pattern Gallery" provides solutions to common design challenges. There is inspiration on every topic from designing your application's navigation to choosing ...
C语言设计模式 PDF《C Design Pattern》C语言设计模式 PDF《C Design Pattern》C语言设计模式 PDF《C Design Pattern》C语言设计模式 PDF《C Design Pattern》
designPattern4 设计模式:组合模式,公司管理系统,迭代器模式(买车票)
Design Pattern 简明手册,设计模式查阅简明手册
JAVA software design pattern