Java使用设计模式中迭代器模式构建项目的代码结构示例

迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
 
迭代器模式由以下角色组成:
迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。
具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。
容器角色(Container):容器角色负责提供创建具体迭代器角色的接口。
具体容器角色(Concrete Container):具体容器角色实现创建具体迭代器角色的接口。这个具体迭代器角色与该容器的结构相关。

Java实现示例
类图:

代码:

/**
 * 自定义集合接口, 类似java.util.Collection
 * 用于数据存储
 * @author stone
 *
 */
public interface ICollection<T> { 

  IIterator<T> iterator(); //返回迭代器
  void add(T t);
  T get(int index);
}
/**
 * 自定义迭代器接口 类似于java.util.Iterator
 * 用于遍历集合类ICollection的数据
 * @author stone
 *
 */
public interface IIterator<T> {
  boolean hasNext();
  boolean hasPrevious();
  T next();
  T previous();
}
/**
 * 集合类, 依赖于MyIterator
 * @author stone
 */
public class MyCollection<T> implements ICollection<T> { 

  private T[] arys;
  private int index = -1;
  private int capacity = 5; 

  public MyCollection() {
    this.arys = (T[]) new Object[capacity];
  } 

  @Override
  public IIterator<T> iterator() {
    return new MyIterator<T>(this);
  } 

  @Override
  public void add(T t) {
    index++;
    if (index == capacity) {
      capacity *= 2;
      this.arys = Arrays.copyOf(arys, capacity); 

    }
    this.arys[index] = t;
  } 

  @Override
  public T get(int index) {
    return this.arys[index];
  } 

}
/*
 * 若有新的存储结构,可new 一个ICollection, 对应的 new 一个IIterator来实现它的遍历
 */
@SuppressWarnings({"rawtypes", "unchecked"})
public class Test {
  public static void main(String[] args) {
    ICollection<Integer> collection = new MyCollection<Integer>();
    add(collection, 3, 5, 8, 12, 3, 3, 5);
    for (IIterator<Integer> iterator = collection.iterator(); iterator.hasNext();) {
      System.out.println(iterator.next());
    } 

    System.out.println("-------------"); 

    ICollection collection2 = new MyCollection();
    add(collection2, "a", "b", "c", 3, 8, 12, 3, 5);
    for (IIterator iterator = collection2.iterator(); iterator.hasNext();) {
      System.out.println(iterator.next());
    } 

  } 

  static <T> void add(ICollection<T> c, T ...a) {
    for (T i : a) {
      c.add(i);
    }
  }
}

打印:

3
5
8
12
3
3
5
-------------
a
b
c
3
8
12
3
5
(0)

相关推荐

  • 使用迭代器模式来进行Java的设计模式编程

    定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节. 类型:行为类模式 类图: 如果要问java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模式,而是迭代器模式,先来看一段代码吧: public static void print(Collection coll){ Iterator it = coll.iterator(); while(it.hasNext()){ String str = (String)it.next(); System.out

  • 轻松掌握Java迭代器模式

    定义:用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 特点: 1.它支持以不同的方式遍历一个聚合对象. 2.迭代器简化了聚合类. 3.在同一个聚合上可以有多个遍历. 4.在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码. 企业级开发和常用框架中的应用:java集合都实现了迭代器 具体实例: public class Demo { public static void main(String[] args) { ActualContainer container =

  • Java设计模式之迭代器模式_动力节点Java学院整理

    定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节. 类型:行为类模式 类图: 如果要问Java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模式,而是迭代器模式,先来看一段代码吧: public static void print(Collection coll){ Iterator it = coll.iterator(); while(it.hasNext()){ String str = (String)it.next(); System.out

  • java 迭代器模式实例详解

    java 迭代器模式实例详解 今天来818设计模式中的迭代器模式,也是java中Stack,List,Set等接口以及数组这个数据结构都会使用的一种模式. 首先,为什么使用迭代器模式,目的就是通过一个通用的迭代方法,隐藏stack,list,set以及数组中不同的遍历细节.也就是说,我不想让那些调用我的遍历容器的方法的人知道我到底是怎么一个一个的获取这些元素的(stack的pop,list的get,数组的array[i]),我只想让他知道他能 通过一个迭代器Iterator或者通过一个for e

  • Java使用设计模式中迭代器模式构建项目的代码结构示例

    迭代器(Iterator)模式,又叫做游标(Cursor)模式.GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节.   迭代器模式由以下角色组成: 迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口. 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置. 容器角色(Container):容器角色负责提供创建具体迭代器角色的接口. 具体容器角色(Concre

  • Java结构型设计模式中建造者模式示例详解

    目录 建造者模式 概述 角色 优缺点 应用场景 基本使用 创建产品类 创建建造者类 使用 链式写法 创建产品类与建造者类 使用 建造者模式 概述 建造者模式(Builder Pattern)属于创建型模式. 它是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 简而言之:建造者模式就是使用多个简单的对象一步一步构建成一个复杂的对象. 建造者模式适用于创建对象需要很多步骤,但是步骤的顺序不一定固定.如果一个对象有非常复杂的内部结构(很多属性),可以将复杂对象的创建和使用进行分

  • 深入理解Java设计模式之迭代器模式

    目录 一.什么是迭代器模式 二.迭代器模式的结构 三.迭代器模式的使用场景 四.迭代器模式的优缺点 优点: 缺点: 五.迭代器模式的实现 抽象聚合类 迭代器抽象类 具体聚合类 具体迭代器类 客户端调用 六.NET中迭代器模式的应用 七.总结 一.什么是迭代器模式 迭代器模式是针对集合对象而生的,对于集合对象而言,肯定会涉及到对集合的添加和删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作放在集合对象中,但这样的话,集合对象既承担太多的责任了,面向对象设计原则中有一条就是单一职责原

  • Java中如何快速构建项目脚手架的实现

    目录 1 前言 2 微服务项目准备 3 脚手架构建 3.1 项目正常启动 && 测试用例正常 3.2 在项目的根pom中加入以下maven插件配置 3.3 执行archetype插件 3.4 执行安装命令 3.5 将smilehappiness-project-template deploy到私服 4 基于脚手架生成新的项目 4.1 添加脚手架 4.2 创建新项目 4.3 命令行基于脚手架生成新的项目 1 前言 项目中,目前主流的当然是微服务项目.为了应对高并发,以及保证自己的服务比较稳定

  • Java结构型设计模式中代理模式示例详解

    目录 代理模式 分类 主要角色 作用 静态代理与动态代理的区别 静态代理的基本使用 创建抽象主题 创建真实主题 创建代理主题 客户端调用 JDK动态代理的基本使用 创建抽象主题 创建真实主题 创建代理主题 客户端调用 小优化 CGLIB动态代理的基本使用 创建抽象主题 创建真实主题 创建代理主题 客户端调用 小优化 CGLIB与JDK动态代理区别 1.执行条件 2.实现机制 3.性能 代理模式 代理模式(Proxy Pattern)属于结构型模式. 它是指为其他对象提供一种代理以控制对这个对象的

  • Java结构性设计模式中的装饰器模式介绍使用

    目录 装饰器模式 概述 实现原理 主要角色 应用场景 优缺点 装饰器模式的基本使用 创建抽象组件 具体组件 抽象装饰器 具体装饰器 客户端调用 装饰器模式 概述 装饰器模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),属于结构型模式. 它是指在不改变原有对象的基础之上,允许向一个现有的对象添加新的功能,同时又不改变其结构,作为现有的类的一个包装. 这种模式创建一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能. 提供了比继承

  • Java设计模式中桥接模式应用详解

    目录 1.桥接(Bridge)设计模式定义 2.桥接设计模式优点以及不足 3.桥接设计的实现思路 4.桥接设计模式示例 5.桥接模式的应用场景 6.桥接设计模式和适配器设计模式对比 编程是一门艺术,大批量的改动显然是非常丑陋的做法,用心的琢磨写的代码让它变的更美观. 显示生活中有物品具有多个维度的属性,比如文字有颜色和字体两个维度的差别,汽车有颜色和牌子两个维度的属性等.如果用继承方式,不但对应的子类很多,而且扩展困难.如果用桥接模式就能很好地解决这些问题. 1.桥接(Bridge)设计模式定义

  • Java设计模式之访问者模式使用场景及代码示例

    Java设计模式访问者模式 模式概念 访问者模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作.访问者模式适用于数据结构相对稳定算法又易变化的系统,若系统数据结构对象易于变化,则不适合使用访问者模式.访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者. Visitor应用场景 一定会有的疑问:visitor和iterator的区别: visitor可以访问不同的对象(只需要在Element定义对应的accept),但是Ite

  • Android编程设计模式之迭代器模式详解

    本文实例讲述了Android编程设计模式之迭代器模式.分享给大家供大家参考,具体如下: 一.介绍 迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是行为型设计模式之一.迭代器模式算是一个比较古老的设计模式,其源于对容器的访问,比如Java中的List.Map.数组等,我们知道对容器对象的访问必然会涉及遍历算法,我们可以将遍历的方法封装在容器中,或者不提供遍历方法.如果我们将遍历的方法封装到容器中,那么对于容器类来说就承担了过多的功能,容器类不仅要维护自身内部的数据元

随机推荐