JAVA语言设计模式原则之迭代器模式实例讲解
小标 2018-12-26 来源 : 阅读 1049 评论 0

摘要:本文主要向大家介绍了JAVA语言设计模式原则之迭代器模式实例讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言设计模式原则之迭代器模式实例讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


迭代器模式定义


Iterator Pattern:Provide a way to access the elements of an aggregate object sequentially without


exposing its underlying representation.


迭代器模式:它提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内容细节。


通用类图



Iterator抽象迭代器:


抽象迭代器负责定义访问和遍历元素的接口,而且基本上是固定的3个方法:first()获得第一个元素,next()访问下一个元素,isDone()是否已经访问到底部(Java叫做hasNext()方法) ConcreteIterator具体迭代器:


具体迭代器角色要实现迭代器接口,完成容器元素的遍历。 Aggregate抽象容器:


容器角色负责提供创建具体迭代器角色的接口,必然提供一个类似createIteraor()这样的方法,在java中一般是iterator()方法。 concrete Aggregate具体容器:


具体容器实现容器接口定义的方法,创建出容纳迭代器的对象。


代码实现


Iterator 抽象迭代器:


public interface Iterator {  

    //遍历到下一个元素  

    public Object next();  

    //是否已经遍历到尾部  

    public boolean hasNext();  

    //删除当前指向的元素  

    public boolean remove();  

}

   


ConcreteIterator 具体迭代器:


import java.util.Vector;  

 

 

public class ConcreteIterator implements Iterator {  

 

    private Vector vector = new Vector();  

 

    //定义当前游标  

    public int cursor = 0;  

 

    public ConcreteIterator(Vector vector) {  

        this.vector = vector;  

    }  

 

    @Override 

    public Object next() {  

        Object result = null;  

        if(this.hasNext()) {  

            result = this.vector.get(this.cursor++);  

        } else {  

            result = null;  

        }  

        return result;  

    }  

 

    @Override 

    public boolean hasNext() {  

        if(this.cursor == this.vector.size()) {  

            return false;  

        } else {  

            return true;  

        }  

    }  

 

    @Override 

    public boolean remove() {  

        this.vector.remove(this.cursor);  

        return true;  

    }  

 

}

   


Aggregate 抽象容器类:


public interface Aggregate {  

 

    //是容器必然有元素的添加  

    public void add(Object object);  

    //减少元素  

    public void remove(Object object);  

    //有迭代器来遍历所有元素  

    public Iterator iterator();  

}

   


ConcreteAggregate 具体容器:


import java.util.Vector;  

 

 

public class ConcreteAggregate implements Aggregate {  

    //容纳对象的容器  

    private Vector vector = new Vector();  

 

    @Override 

    public void add(Object object) {  

        this.vector.add(object);  

    }  

 

    @Override 

    public void remove(Object object) {  

        this.remove(vector);  

    }  

 

    @Override 

    public Iterator iterator() {  

        return new ConcreteIterator(vector);  

    }  

 

}  

   


场景类:


public class Client {  

    public static void main(String[] args) {  

        //声明出容器  

        Aggregate aggregate = new ConcreteAggregate();  

        aggregate.add("abc");  

        aggregate.add("aaa");  

        aggregate.add("1234");  

 

        //遍历一下  

        Iterator iterator = aggregate.iterator();  

        while(iterator.hasNext()) {  

            System.out.println(iterator.next());  

        }  

    }  

}

   


注意点


迭代器模式目前已经是一个没落的模式,基本没人会单独写一个迭代器,除非是产品性质的开发。 开发系统时,迭代器的删除方法应该完成两个逻辑:一是删除当前元素,二是当前游标指向下一个元素。


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程