亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

設計模式筆記(22)--迭代器模式

標簽:
設計模式

迭代器模式提供一种顺序访问某个集合中所有元素的解决方案,而不用了解集合底层的操作。

GOF对于迭代器模式的定义是:“提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。”

当需要访问一个聚合对象,并且不管这些对象是什么都要遍历一遍的时候,就应该考虑使用迭代器模式。
迭代器应该为不同的聚集结构提供如开始,下一位,是否遍历到聚集尾部,当前位于聚集中哪一个位置等的统一接口。

下面上代码

package Iterator;public abstract class Aggregate {    public abstract Iterator CreateIterator();
}
package Iterator;import java.util.ArrayList;import java.util.List;public class ConcreteAggregate extends Aggregate{    private List<Object> items = new ArrayList<Object>();    public int getSize()
    {        return items.size();
    }    
    public Object getItem(int i)
    {        return items.get(i);
    }    
    public void setItem(int i,Object obj)
    {
        items.add(i,obj);
    }    @Override
    public Iterator CreateIterator() {        // TODO Auto-generated method stub
        return new ConcreteIterator(this);
    }
}
package Iterator;public abstract class Iterator {    public abstract Object First();    public abstract Object Next();    public abstract Boolean IsDone();    public abstract Object CurrentItem();
}
package Iterator;public class ConcreteIterator extends Iterator{    private ConcreteAggregate aggregate;    private int current = 0;    public ConcreteIterator(ConcreteAggregate aggregate)
    {        this.aggregate = aggregate;
    }    @Override
    public Object First() {        // TODO Auto-generated method stub
        return this.aggregate.getItem(0);
    }    @Override
    public Object Next() {        // TODO Auto-generated method stub
        Object obj = null;
        current++;        if(current < this.aggregate.getSize())
        {
            obj = this.aggregate.getItem(current);
        }        return obj;
    }    @Override
    public Boolean IsDone() {        // TODO Auto-generated method stub
        if(current >= this.aggregate.getSize())
        {            return true;
        }        else 
        {            return false;
        }
    }    @Override
    public Object CurrentItem() {        // TODO Auto-generated method stub
        return this.aggregate.getItem(current);
    }
}
package Iterator;public class client {    public static void main(String[] args)
    {
        ConcreteAggregate ca = new ConcreteAggregate();        for(int i = 0;i<10;i++)
        {
            ca.setItem(i, "求职者"+(i+1));
        }
        Iterator it = new ConcreteIterator(ca);        while(!it.IsDone())
        {
            System.out.println(it.CurrentItem() + "请来我公司面试!");
            it.Next();
        }
    }
}

webp

迭代器模式分类了集合对象的遍历行为,抽象出一个迭代器类来负责具体的遍历行为,这样做的好处是既不暴露集合的内部结构,又可以让外部代码以透明地方式访问集合内部的数据。


迭代器适用于以下几种情况:

  1. 当需要访问一个聚合对象的内容而又不想暴露他的内部表示的时候

  2. 当希望支持对聚集对象的多种遍历方式时

  3. 当需要为遍历不同的聚集结构提供统一的对外接口时



作者:球球球球笨
链接:https://www.jianshu.com/p/87971ede89c7


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消