`

设计模式(13)- 迭代器模式

阅读更多

迭代器模式

1.定义

        提供一种方法,顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

2.示例代码

         使用迭代器模式,遍历数组和链表两个聚合对象。

  

/*工资模型描述对象*/
public class PayModel{
    //员工姓名
    private String userName;
    //支付工资
    private double pay;
    public String getUserName(){
       return userName;
    }
    public void setUserName(String userName){
        this.userName = userName;
    }
    public double getPay(){
       return pay;
    }
    public void setPay(double pay){
        this.pay = pay;
    }
}

/*统一访问聚合的接口*/
public interface Iterator{
   public void first();
   public void next();
   public boolean isDone();
   public Object currentItem();
}

/*获取访问聚合对象的接口*/
pubic abstract class Aggregate{
    /*工厂方法,创建相应的迭代器对象接口*/
    pubic abstract Iterator createIterator();
}

   

/*子公司1的工资管理,内部通过array管理*/
public class SalaryManager extends Aggregate{
    //返回聚合对象迭代器
    public Iterator createIterator(){
       return new ArrayIteratorImpl(this);
    }
    public Object get(int index){
       Object retObj = null;
       if(index < pms.length){
          retObj = pms[index];
       }
       return retObj;
    }
    public int size(){
       return this.list.length;
    }    
    //聚合对象为数组 
    private PayModel[] pms = null;
    //获取工资列表
    public PayModel[] getPays(){
       return pms;
    }
    //计算工资
    public void calcSalary(){    
       PayModel pm1 = new PayModel();
       pm1.setPay(3800);
       pm1.setUserName("张三");
       PayModel pm2 = new PayModel();
       pm2.setPay(3600);
       pm2.setUserName("李四");  
       pms = new PayModel[2];
       pms[0] = pm1;
       pms[1] = pm2;
    }
}

/*用来实现数组访问的迭代接口*/
public class ArrayIteratorImpl implements Iterator{
    /*存放被迭代的聚合对象*/
    private SalaryManager aggregate = null;
    //当前记录的索引
    private int index = -1;
    public ArrayIteratorImpl(SalaryManager aggregate){
        this.aggregate = aggregate;
    }
    public void first(){
         index = 0;
    }
    public void next(){
       if(next < this.aggregate.size()){
            index = index + 1;
       }
    }
    public boolean isDone(){
        if(index == this.aggregate.size()){
            return true;
        }
        return false;
    }
    public Object currentItem(){
        return this.aggregate.get(index);
    }
}

/*子公司2的工资管理,内部通过list管理*/
public class PayManager extends Aggregate{
    //返回聚合对象迭代器
    public Iterator createIterator(){
       return new CollectionIteratorImpl(this);
    }
    public Object get(int index){
       Object retObj = null;
       if(index < this.list.size()){
          retObj = this.list.get(index);
       }
       return retObj;
    }
    public int size(){
       return this.list.size();
    }
    //聚合对象为java的集合对象
    private List list = new ArrayList();
    //获取工资链表
    public List getPayList(){
        return list;
    }
    //计算工资
    public void calcPay(){
        PayModel pm1 = new PayModel();
        pm1.setPay(3800);
        pm1.setUserName("张三");
        PayModel pm2 = new PayModel();
        pm2.setPay(3600);
        pm2.setUserName("李四");
        list.add(pm1);
        list.add(pm2);
    }
}
/*用来实现链表访问的迭代接口*/
public class CollectionIteratorImpl implements Iterator{
    /*存放被迭代的聚合对象*/
    private PayManager aggregate = null;
    //当前记录的索引
    private int index = -1;
    public CollectionIteratorImpl(PayManager aggregate){
        this.aggregate = aggregate;
    }
    public void first(){
         index = 0;
    }
    public void next(){
       if(next < this.aggregate.size()){
            index = index + 1;
       }
    }
    public boolean isDone(){
        if(index == this.aggregate.size()){
            return true;
        }
        return false;
    }
    public Object currentItem(){
        return this.aggregate.get(index);
    }
}

   

/*统一访问的客户端*/
public class Client{
    public static void main(String args[]){
       //访问子公司1的工资列表
       SalaryManager salaryManager = new SalaryManager();
       salaryManager.calcSalary();
       System.out.println("子公司1的工资列表:");
       test(salaryManager.createIterator());
       //访问子公司2的工资列表
       PayManager payManager = new PayManager();
       payManager.calcSalary();
       System.out.println("子公司2的工资列表:");
       test(payManager.createIterator());
    }
    /*通过迭代器访问*/
    private static void test(Iterator it){
       it.first();
       while(!it.isDone()){
          Object obj = it.currentItem();
          System.out.println("this ojb = " + obj);
          it.next();
       }
    }
}

 

3.实际应用

      迭代器模式的功能主要用于提供对集合对象的迭代访问,就是围绕这个“访问”做文章,延伸出很多功能,比如以不同的方式遍历集合对象、对同一个对象同时进行多个遍历、以不同的遍历策略来遍历集合,如是否需要过滤、多态迭代,上边的实例已经实现了多态迭代。

 

迭代器模式的本质:控制访问集合对象中的元素

 

分享到:
评论

相关推荐

    java设计模式--迭代器模式源码

    java设计模式--迭代器模式,理解这个例子就完全理解迭代器啦

    设计模式--迭代器模式java例子

    迭代器模式是一种行为设计模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式广泛应用于集合框架,如ArrayList、LinkedList等。本示例将深入探讨如何在Java中实现和使用迭代器...

    Android设计模式之--迭代器模式

    迭代器模式是软件设计模式中的一种行为模式,它在Android开发中被广泛应用,尤其是在处理集合对象的遍历操作时。这种模式提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java或Android编程中,...

    JAVA-设计模式-行为型模式-迭代器模式

    JAVA-设计模式-行为型模式-迭代器模式

    设计模式课件大全

    PPT内容包括:内附代码,...设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。

    java设计模式--迭代器设计模式.docx

    迭代器模式是软件设计模式中的一种行为模式,其主要目的是为了在不暴露聚合对象内部结构的情况下,提供一种顺序访问聚合对象中各个元素的方式。在Java中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等...

    设计模式-迭代器模式(讲解及其实现代码)

    迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。这种模式允许我们遍历集合中的每个元素,同时保持集合本身抽象,不需了解其内部结构。 在Java、C#等面向对象语言...

    java常用设计模式-迭代器模式

    Java 迭代器模式是一种行为设计模式,它提供了一种访问集合对象元素的方法,而不需要暴露该对象的内部表示。该模式适用于需要遍历集合对象的场景,例如数组、列表、树等。 迭代器模式的主要优点是: 1. 避免了集合...

    c++设计模式-行为型模式-迭代器模式

    迭代器模式是软件设计模式中的一种行为模式,它在C++以及其他面向对象编程语言中有着广泛的应用。这个模式的主要目标是允许用户以一种统一的方式遍历聚合对象中的元素,而无需暴露聚合对象的内部结构。这增加了代码...

    设计模式-迭代器模式

    迭代器模式是一种软件设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。在iOS开发中,迭代器模式同样适用,可以帮助开发者在不暴露内部数据结构的情况下遍历集合对象。下面我们将深入...

    java设计模式-迭代器模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    java基础 集合-22-迭代器设计模式

    迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而不暴露其底层表示。在Java中,迭代器模式广泛用于遍历集合类,如ArrayList、LinkedList、HashSet和HashMap等。通过迭代器,我们可以...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。 - 备忘录模式(Memento):在不破坏封装性的前提下...

    c#代码介绍23种设计模式-16迭代器模式(附代码)

    1. 迭代器模式的介绍 迭代器是针对集合对象而生的,对于集合对象而言,必然涉及到集合元素的添加删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作也放在集合对象中, 但这样的话,集合对象就...

    23钟设计模式之迭代器模式模式

    迭代器模式是23种设计模式之一,属于行为型模式。它提供了一种访问聚合对象元素的方式,而不需要暴露该对象的内部实现。迭代器模式的主要目的是让开发者能够轻松地遍历聚合对象中的元素,而不需要关心对象的内部实现...

    设计模式之迭代器模式

    迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在编程中,特别是面向对象编程中,迭代器模式扮演着非常重要的角色,它提供了统一的接口来遍历各种集合类型,...

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

    迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在“设计模式之迭代器模式(新)”中,我们将深入探讨这种模式的核心概念、实现方式以及它在实际编程中的应用...

    C#学习笔记整理-迭代器模式介绍

    迭代器模式是一种设计模式,它在软件开发中用于顺序访问聚合对象(如列表、集合等)的元素,而无需暴露其内部结构。这种模式允许在不同的聚合对象间使用相同的遍历逻辑,增强了代码的可复用性和灵活性。 在C#中,...

    设计模式专题之(二十三)迭代器模式---设计模式迭代器模式示例代码(python--c++)

    迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。在本文中,我们将深入探讨迭代器模式的概念,并通过Python和C++两种编程语言展示其实现。 首先,理解迭代器模式...

Global site tag (gtag.js) - Google Analytics