前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式-迭代器模式

设计模式-迭代器模式

作者头像
cwl_java
发布2019-10-26 20:53:12
2570
发布2019-10-26 20:53:12
举报
文章被收录于专栏:cwl_Javacwl_Java

迭代器模式

迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式,其主要优点如下。

1.优点
  • 访问一个聚合对象的内容而无须暴露它的内部表示。
  • 遍历任务交由迭代器完成,这简化了聚合类。
  • 它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。
  • 增加新的聚合类和迭代器类都很方便,无须修改原有代码。
  • 封装性良好,为遍历不同的聚合结构提供一个统一的接口。
2.确定
  • 增加了类的个数,这在一定程度上增加了系统的复杂性。
3.代码示例
3.1 迭代器接口
代码语言:javascript
复制
public interface Iterator {

    //获得第一个
    Object first();
    //获得下一个
    Object next();
    //判断是否由下一个
    boolean hasNext();
}
3.2 聚合接口
代码语言:javascript
复制
public interface Aggregate {

    //添加
    void add(Object obj);
    //删除
    void remove(Object obj);
    //迭代
    Iterator getIterator();
}
3.3 迭代器实现类
代码语言:javascript
复制
public class ConcreteIterator implements Iterator {
    private List<Object> list=null;
    private int index=-1;

    public ConcreteIterator(List<Object> list) {
        this.list=list;
    }

    @Override
    public boolean hasNext() {
        if(index<list.size()-1) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public Object first() {
        index=0;
        Object obj=list.get(index);;
        return obj;
    }

    @Override
    public Object next() {
        Object obj=null;
        if(this.hasNext()) {
            obj=list.get(++index);
        }

        return obj;
    }
}
3.4 聚合实现类
代码语言:javascript
复制
public class ConcreteAggregate implements Aggregate {

    private List<Object> list=new ArrayList<Object>();

    @Override
    public void add(Object obj) {
        list.add(obj);
    }

    @Override
    public void remove(Object obj) {
        list.remove(obj);
    }

    @Override
    public Iterator getIterator() {
        return(new ConcreteIterator(list));
    }
}
3.5 测试用例
代码语言:javascript
复制
public class IteratorPattern {

    public static void main(String[] args) {
        Aggregate ag=new ConcreteAggregate();
        ag.add("中山大学");
        ag.add("华南理工");
        ag.add("韶关学院");
        System.out.print("聚合的内容有:");
        Iterator it=ag.getIterator();

        while(it.hasNext()) {
            Object ob=it.next();
            System.out.print(ob.toString()+"\t");
        }

        Object ob=it.first();
        System.out.println("\nFirst:"+ob.toString());
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 迭代器模式
    • 1.优点
      • 2.确定
        • 3.代码示例
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档