Hello,各位看官老爺們,千絕我回來更新了,最近發生了一件人生大事,導致了我鴿了一個星期,就是千絕看了一週的房,終於靠自己的努力讓我的家人幫我買房了(hahaha)相信在座的各位看官老爺們也可以。
好了不開玩笑了,因為千絕年底要結婚了,所以趁現在就去看了一下婚房,我感覺我買房效率還是挺快的,估計遇到我的銷售都開心的飛了,我週四晚上聯繫的房屋銷售,週六上午看的房,下午就把首付交了。我媳婦都說節奏太快了,我也感覺節奏挺快的,就這樣當了韭菜被房子綁住了,以後再也不能想吃啥就吃啥了,從此背上了房貸。
好了現在迴歸正題(文末有彩蛋),前面一篇千絕介紹了觀察者模式,不知道各位看官老爺看的怎麼樣,有沒有對觀察者模式又有了一點新的認識呢,如果有的話那麼千絕的目的就達到了,這篇千絕將會介紹設計模式中的迭代器模式,雖然這個模式現在我們大概率不會自己寫了,因為java已經做的非常的完善了,但是有一句古話說的好,學習歷史,看清方向我們才能更好的前行。
這篇文章千絕會通過一個例子來講解什麼是迭代器模式。
定義
迭代器模式(Iterator),提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內部表示。
千絕對這段定義的理解就是:迭代器模式是為了不暴露對象內部使用的是什麼數據結構,讓外部可以順序訪問對象內部元素的方法
理解還是能理解的,如果不能理解上面的話,千絕會用代碼來給你們講解。
代碼
定義一個迭代器的接口
<code>public interface Iterator{ //返回該對象的第一個元素 T first(); //返回該對象的下一個元素 T next(); //判斷該對象有沒有下一個元素 boolean hasNext(); //返回該對象現在的元素 T getCurrentObj();} /<code>
定義一個實現迭代器的類
<code>public class ConcreateIteratorimplements Iterator /<code>{ List list ; int current =0; public ConcreateIterator(List list){ this.list = list; } @Override public T first() { return list.get(0); } @Override public T next() { T t = null; if(this.hasNext()){ t = list.get(current); current ++ ; } return t; } @Override public boolean hasNext() { if(current < list.size()){ return true; } return false; } @Override public T getCurrentObj() { return list.get(current); }}
定義一個聚合接口
<code>public interface Aggregate{ //添加一個對象 void add(T t); //刪除一個對象 void remove(T t); //生成遍歷器 Iterator /<code>createIteratory();}
定義一個實現聚合接口的類
<code>public class ConcreateAggregateimplements Aggregate /<code>{ private List list = new ArrayList(); @Override public void add(T t) { list.add(t); } @Override public void remove(T t) { list.remove(t); } @Override public Iterator createIteratory() { return new ConcreateIterator(list); }}
定義一個測試類
<code>public class TestIterator { public static void main(String []args){ ConcreateAggregate<string> concreateAggregate= new ConcreateAggregate<string>(); concreateAggregate.add("測試"); concreateAggregate.add("測試1"); concreateAggregate.add("測試2"); concreateAggregate.add("測試3"); concreateAggregate.add("測試4"); concreateAggregate.add("測試5"); concreateAggregate.add("測試6"); concreateAggregate.remove("測試4"); Iterator iterator = concreateAggregate.createIteratory(); System.out.println("第一個是:" + iterator.first()); System.out.println("當前的元素是: " + iterator.getCurrentObj()); while(iterator.hasNext()){ System.out.println(iterator.next()); } }}/<string>/<string>/<code>
總結
看到這裡相信各位看官老爺們都覺得上面的代碼都很熟悉了吧,沒錯千絕是在參考jdk實現迭代器模式的例子,現在java對迭代器運用的已經很好了,我們現在基本上不用自己寫迭代器了,有可能是千絕現在寫的代碼還是太簡單,沒有遇到過自己寫迭代器的情況,所以介紹的有點粗糙還請各位看官老爺們不要介意。
原文鏈接:https://mp.weixin.qq.com/s/pXwdRiA1-QHSaaJEtDh6Tg
閱讀更多 Java高級架構師l 的文章