迭代模式在日常的应用中几乎是无处不在,但是因为Java内部已经实现对集合对象的迭代,所以好像这种模式不常用,其实是用到了,只是没觉察到,今天就在这里剖析其中的秘密。
先看看迭代模式的类图:
关于迭代模式:
迭代模式提供了一种不暴漏集合对象的内部结构,又可以迭代该集合的方法,
关于迭代模式分离的集合对象的遍历行为,抽象出一个迭代类负责遍历,这样就做到了
不暴漏集合对象的内部结构,可以让外部代码透明的访问集合对象内部。
结构:
一个抽象的迭代类,定义了抽象的迭代方法;
一个抽象迭代类的子类,覆盖了父类的所有抽象迭代方法
该子类依赖聚集类的子类
一个抽象的聚集类,定义了创建的迭代类的抽象方法
一个抽象聚集类的子类,覆盖了父类的所有的抽象方法
该子类关联迭代类的子类
根据上面的描述,接下来看代码:
抽象的迭代类:
//创建抽象的迭代类,定了的抽象的迭代方法
public abstract class Iterator {
public abstract String First();
public abstract String Next();
public abstract boolean IsDone();
public abstract String CurrentItem();
}
抽象迭代类的子类
//创建具体的迭代类,需要关联具体的聚集类
public class ConcreteIterator extends Iterator {
private ConcreteAggregate aggregate;
private int index=0;
//定义迭代器的构造方法,使用一个聚集类作为入口参数
public ConcreteIterator(ConcreteAggregate aggregate){
this.aggregate = aggregate;
}
//覆盖了父类的所有的抽象方法
@Override
public String CurrentItem() {
return aggregate.getItem(index);
}
@Override
public String First() {
return aggregate.getItem(0);
}
@Override
public String Next() {
String ret="";
if (!IsDone()){
ret = aggregate.getItem(index);
index +=1 ;
}
return ret;
}
@Override
public boolean IsDone() {
boolean ret;
if (index >= aggregate.getCount()){
ret = true;
}else{
ret = false;
}
return ret;
}
}
抽象聚集类
//创建抽象的聚集类
public abstract class Aggregate {
public abstract Iterator CreateIterator();
}
抽象聚集类的子类
//创建具体的聚集类,该类依赖ConcreteAggregate
public class ConcreteAggregate extends Aggregate{
private List<String> items = new ArrayList<String>();
@Override
public Iterator CreateIterator() {
return new ConcreteIterator(this);
}
public int getCount(){
return items.size();
}
public String getItem(int index){
return items.get(index);
}
public void setItem(String msg){
items.add(msg);
}
}
客户端代码
public class Test {
public static void main(String[] args) {
//创建一个集合对象
ConcreteAggregate aggregate = new ConcreteAggregate();
aggregate.setItem("AAAA");
aggregate.setItem("BBBB");
aggregate.setItem("CCCC");
aggregate.setItem("DDDD");
//创建一个该集合的迭代器,把集合作为参数传入
Iterator i = new ConcreteIterator(aggregate);
String x;
while(!i.IsDone()){
x = i.Next();
putln(x);
}
}
public static void putln(Object o){
System.out.println(o);
}
}
运行结果:
AAAA
BBBB
CCCC
DDDD
在回到上面的图中,在这个类图中可以看出:
迭代器类继承了抽象的迭代器
聚集类继承了抽象的父类,
但是ConcreteIterator和ConcreteAggregate是关联关系,
而 ConcreteAggregate和ConcreteIterator是依赖关系。
一点题外话:
这里有必要说明一下关联和依赖的区别,这两个概念其实很容易混淆
依赖是一个弱得关联,如果一个类A依赖一个类B,那么在A中B有3中用法:
B是全局的
B被实例化
B被作为参数传递
关联代表一种结构化的关系,表现为一个对象能获得另一个对象的实例引用并且调用它的服务,
依赖则是调用了一个对象的服务
关联还有单双向之分,双向关联,AB两个类,如果双向关联,则互为对方的Attribue,单向关联就是一个是另一个的Attribute
依赖则只有单向的
在ConcreteIterator中存在
ConcreteAggregate aggregate;
因此ConcreteAggregate 是ConcreteIterator的属性,属于关联关系
在ConcreteAggregate中存在
new ConcreteIterator(this);
ConcreteIterator 被实例化了,因此ConcreteAggregate 依赖 ConcreteAggregate
- 大小: 51.9 KB
分享到:
相关推荐
这份文档以例子的形式讲诉了设计模式之迭代器与组合模式,希望可以帮助学习的人!
以下是关于JAVA设计模式中提及的四种模式——工厂模式、代理模式、迭代器模式以及责任链模式的详细说明。 1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建...
迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。...在“设计模式之迭代器模式(新)”的学习中,你将能够深入理解这一模式的精髓,并在实际项目中有效利用它。
迭代器模式是软件设计模式中的行为模式之一,它在C++编程中有着广泛的应用。这个模式提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。通过迭代器,用户可以遍历集合中的所有元素,而无需知道如何...
迭代器模式是一种设计模式,它的主要目的是在不暴露容器内部结构的情况下,允许用户遍历容器中的元素。在Java中,这种模式被广泛应用于集合类,如List、Set和Map等,通过Iterator接口来实现对集合的遍历。 迭代器...
迭代器模式(IteratorPattern)是设计模式中的一种行为模式,它提供了一种顺序访问聚合对象元素的方法,同时又不暴露其底层表示。这种模式允许我们遍历集合对象的元素,而无需暴露其内部结构。在Java、C#等面向对象...
迭代器模式是软件设计模式中的一种行为模式,它在Android开发中被广泛应用,尤其是在处理集合对象的遍历操作时。这种模式提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java或Android编程中,...
迭代器模式是软件设计模式中的行为模式之一,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java编程语言中,迭代器模式的应用尤为广泛,尤其是在处理集合类如ArrayList、LinkedList等时。这...
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
为了进一步深入学习迭代器模式和其他设计模式,以下是一些值得推荐的资源: - 《设计模式:可复用面向对象软件的基础》(GoF 四人组著) - 《面向对象分析与设计》(Grady Booch 著) - 《敏捷软件开发:原则、模式...
迭代器模式是一种设计模式,它的主要目的是在不暴露容器对象的内部细节的前提下,提供一种方法来遍历容器中的元素。这种模式遵循了“单一职责原则”,使得容器专注于管理其内部元素,而遍历的责任则交给迭代器来处理...
通过学习和应用这些设计模式,开发者不仅可以提高代码的可读性、可维护性和可扩展性,还能提升团队间的沟通效率,因为设计模式是软件工程中的通用语言。对于任何有志于提升软件开发水平的人来说,理解和掌握设计模式...
"设计模式迭代器模式PPT学习教案" 迭代器模式是对象行为型模式,提供一种方法顺序访问一个聚合对象中各个元素,且不用暴露该对象的内部表示。迭代器模式的主要优点是将遍历数据的行为从聚合对象中分离出来,封装在...
迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在C#中,迭代器模式的应用非常广泛,尤其是在处理集合类库时。本教程将深入讲解如何在C#中实现迭代器模式。 ...
本资源"设计模式学习.zip"聚焦于C++编程语言中的设计模式应用,是2017年的一次黑马程序员培训课程的配套代码,旨在帮助学习者通过实际的代码示例来理解和掌握设计模式。 在C++中,设计模式主要分为三大类:创建型...
在给定的标题“状态及模板和迭代等设计模式及实现”中,提到了三种经典的设计模式:状态模式、模板模式和迭代器模式。这些模式都是软件工程中常用的设计策略,旨在提高代码的可复用性、可读性和可维护性。 **状态...
总之,《新版设计模式手册 - C#设计模式(第二版)》是学习和掌握C#设计模式的宝贵资源,通过学习和实践书中的内容,开发者能够提升软件设计能力,编写出更优雅、可维护的代码。这本书将帮助你从一个代码实现者成长为...
这本书的课后习题和模拟试题旨在帮助读者巩固学习内容,加深对设计模式的理解,提升实际编程能力。 课后习题参考答案部分涵盖了书中各个章节的关键知识点,包括创建型模式(如单例模式、工厂方法模式、抽象工厂模式...
迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)是设计模式中的两种重要结构型模式,它们在软件设计中...在《Head First 设计模式》中,作者通过直观易懂的方式讲解了这两种模式,值得深入学习和实践。