`

Iterator,组合

    博客分类:
  • java
阅读更多

Iterator:

public interface Iterator {
 boolean hasNext();
 Object next();
}

数组实现:

public class ArrayIterator implements Iterator {
 MenuItem[] items;
 int position = 0;
 
 public ArrayIterator(MenuItem[] items) {
  this.items = items;
 }
 
 public Object next() {
  MenuItem menuItem = items[position];
  position = position + 1;
  return menuItem;
 }
 
 public boolean hasNext() {
  if (position >= items.length || items[position] == null) {
   return false;
  } else {
   return true;
  }
 }
}

ArrayList提供了自己的实现。

也可以用for(Object obj:objects)来循环。可用于数组和数组列表。

 

组合包含组件,组件有两种:组合和叶子。会得到一个树型结构。

菜单组件:

public abstract class Component {
   /**
    * 组合可用的
    * @author handw
    * @time 2009-8-12下午01:02:17
    * @param Component
    */
 public void add(Component Component) {
  throw new UnsupportedOperationException();
 }
 /**
  * 叶子和组合都可以用的
  * @author handw
  * @time 2009-8-12下午01:02:30
  * @return
  */
 public String getName() {
  throw new UnsupportedOperationException();
 }
 /**
  * 遍历
  * @author handw
  * @time 2009-8-12下午01:02:42
  */
 public void print() {
  throw new UnsupportedOperationException();
 }
}

组合:

public class Menu extends Component {
 ArrayList components = new ArrayList();
 String name;
 public Menu(String name) {
  this.name = name;
 }
 
 public void add(Component component) {
  components.add(component);
 }
 
 
 public String getName() {
  return name;
 }

 public void print() {
  System.out.print("\n" + getName());
  System.out.println(", " + getDescription());
  System.out.println("---------------------");
 
  Iterator iterator = Components.iterator();
  while (iterator.hasNext()) {
   Component component =              //主要递归
    (Component)iterator.next();
   Component.print();
  }
 }
}

叶子:

public class MenuItem extends Component {
 String name;
   
 public MenuItem(String name )
              
 {
  this.name = name;
  
 }
 
 public String getName() {
  return name;
 }
 
 
 public void setName(String name) {
  this.name = name;
 }

 public void print() {
  System.out.print("  " + getName());
 
 }
}

这样得到一个组合,可以直接调用print进行遍历。

分享到:
评论

相关推荐

    开源项目-json-iterator-go.zip

    这个项目的名称"jsoniter"是由"json"和"iterator"两个词组合而成,暗示其专注于JSON数据的迭代解析。 在Go的标准库`encoding/json`中,`Marshal`和`Unmarshal`是两个关键函数,分别用于将Go结构体编码为JSON字符串...

    Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现

    迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)是设计模式中的两种重要结构型模式,它们在软件设计中有着广泛的应用。这两种模式都属于GoF(Gang of Four)设计模式,旨在解决特定的问题,提升代码...

    s:iterator 用法.pdf

    Struts2框架中的`s:iterator`标签是用于循环遍历数据集合的重要标签,适用于处理数组、列表、Map等数据结构。下面将详细讲解这个标签的用法及其...在实际开发中,可以根据需求组合使用这些特性来实现动态渲染页面内容。

    s:iterator的EL表达式原理

    在实际开发中,这样的组合不仅可以提高代码的可读性,还能有效地分离视图层和控制层,促进应用程序的模块化和可维护性。记住,无论对象结构如何复杂,只要提供了相应的getter和setter方法,EL表达式都能够轻松处理。

    factory strategy builder iterator

    在软件设计领域,"Factory Strategy Builder Iterator" 是一组常见的设计模式组合,它们各自有独特的功能和应用场景,但常被一起使用以实现灵活、可扩展的系统。这些模式都是面向对象设计中的重要工具,有助于提高...

    排列组合的具体组合

    排列组合的具体组合 本资源主要围绕排列组合的概念,通过 C++ 编程语言实现了 C(n,m) 的任意求解算法,并提供了相关的实验代码。 排列组合的概念 排列组合是数学中的一种重要概念,用于描述从一个集合中选取一定...

    Rust Iterator Cheat Sheet.pdf

    6. 迭代器的构建和扩展:包括如何使用迭代器的方法构建新的迭代器,以及如何通过方法链的方式对迭代器进行扩展和组合。 7. 高阶函数:在Rust中,迭代器常常与高阶函数一起使用,这些高阶函数接受其他函数作为参数,...

    设计模式之迭代器模式(Iterator)

    在实际应用中,迭代器模式常用于各种容器(如数组、链表、树等)的遍历,以及模板方法模式、策略模式等设计模式的组合。例如,在Java的`Collections`类中,有许多方法(如`sort()`、`shuffle()`)都依赖于迭代器来...

    ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解

    在es6之前有 Array , Object, es6新增了 map, set,当然用户也可以组合使用这几种数据结构,灵活存储数据。 但是当数据结构变得复杂后,怎样取到里面的数据就也相对复杂,这就需要有一种读取数据的统一的接口机制,...

    实验7 Python组合数据类型.pdf

    生成器(Generator)是Python中的一种迭代器(Iterator),它可以创建一个可以迭代的对象,但不会一次性将所有元素加载到内存中,而是按需生成。例如,g=((i+2)**2 for i in range(10))创建了一个生成器对象g,该...

    iterator2d:Rust中的二维集合迭代器

    3. **组合其他迭代器方法**:由于`Iterator2d`实现了`Iterator` trait,你可以链式调用其他迭代器方法,如`filter()`来过滤元素,`map()`来转换元素,或`enumerate()`来获取元素的索引和值。 4. **内存效率**:`...

    组合模式二叉树,前序、中序、后续,迭代器模式访问遍历

    在这个主题中,我们主要探讨了如何利用组合模式(Composite Pattern)构建二叉树,并通过迭代器模式(Iterator Pattern)来实现对树的遍历,包括前序、中序和后序遍历。这些是设计模式中的经典应用,对于理解和掌握...

    SSH笔记-set标签、push标签、if/elseif/else标签、iterator标签、sort标签

    在IT行业中,SSH通常指的是Struts、Spring和Hibernate三大开源框架的组合,它们是Java Web开发中的重要工具。本文将详细讲解SSH框架中涉及到的五个关键标签:`set`、`push`、`if/elseif/else`、`iterator`以及`sort`...

    Struts2中使用标签实现组合查询和带分页的例子

    本篇将重点讲解如何利用`sx:`标签实现组合查询和带分页功能。 首先,让我们了解下Struts2的`sx:`标签。它扩展了Struts2的OGNL(Object-Graph Navigation Language)表达式,使得在JSP页面中可以直接访问Action类中...

    树的构件与遍历---使用组合模式与迭代模式

    在这个话题中,我们将深入探讨如何利用组合模式(Composite Pattern)和迭代模式(Iterator Pattern)来构建和遍历树结构。 **组合模式**是面向对象设计模式的一种,它允许我们处理部分和整体的关系。在树形结构中...

    组合模式的实践demo

    同时,可能还有一个`Iterator`类用于遍历组件树。 通过这样的设计,组合模式提供了一种灵活的、可扩展的方式来构建和操作对象树。它促进了代码的简洁性和可维护性,因为用户可以使用统一的接口处理单个对象和对象...

    comp-Option,Result和Iterator的纯宏符号和列表理解-Rust开发

    它提供语法扩展以轻松组合包装器类型(Option,Result和Iterator),看起来像文档用法首先,将以下内容添加到您的Cargo.toml中:[dependencies] comp =“ *”接下来,将其添加到您的板条箱根中:#[macro_use] ...

    设计模式实验

    Iterator iterator = menuComponents.iterator(); while (iterator.hasNext()) { MenuComponent menuComponent = (MenuComponent) iterator.next(); menuComponent.print(); } } ``` 通过这种方式,我们不仅...

    double-stream-iterator:一次扫描两个流的实用程序模块

    迭代器会按照一定的策略(如交错、同步或等待所有流都准备好后再继续等)将两个流中的元素组合在一起。 使用这个模块,你可以实现以下功能: 1. **交错遍历**:将两个流中的元素交替取出,例如,如果第一个流有 `...

Global site tag (gtag.js) - Google Analytics