日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式:迭代器模式(Iterator)

發布時間:2024/4/11 asp.net 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式:迭代器模式(Iterator) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。


歡迎跳轉到本文的原文鏈接:https://honeypps.com/design_pattern/iterator/

提供一種方法順序訪問一個聚合對象中各個元素,而又不需暴露該對象的內部表示。又稱游標(Cursor)模式

迭代器模式角色組成:

  • 抽象容器角色(Aggregate):負責提供創建具體迭代器角色的接口,一般是一個接口,提供一個iterator()方法,例如java中的Collection接口,List接口,Set接口等。
  • 具體容器角色(ConcreteAggregate):就是實現抽象容器的具體實現類,比如List接口的有序列表實現ArrayList,List接口的鏈表實現LinkedList,Set接口的哈希列表的實現HashSet等。
  • 抽象迭代器角色(Iterator):負責定義訪問和遍歷元素的接口。
  • 具體迭代器角色(ConcreteIterator):實現迭代器接口,并要記錄遍歷中的當前位置。
  • 舉個簡單案例
    1 Iterator

    public interface Iterator {public Object next();public boolean hasNext(); }

    2 ConcreteIterator

    public class ConcreteIterator implements Iterator {private List<Object> list = Collections.emptyList();private int current = 0;public ConcreteIterator(List<Object> list){this.list = list;}@Overridepublic Object next(){Object obj = null;if(this.hasNext()){obj = this.list.get(current++);}return obj;}@Overridepublic boolean hasNext(){if(current == list.size()){return false;}return true;} }

    3 Aggregate

    public interface Aggregate {public void add(Object obj);public void remove(Object obj);public Iterator iterator(); }

    4 ConcreteAggregate

    public class ConcreteAggregate implements Aggregate {private List<Object> list = new ArrayList<>();@Overridepublic void add(Object obj){list.add(obj);}@Overridepublic void remove(Object obj){list.remove(obj);}@Overridepublic Iterator iterator(){return new ConcreteIterator(list);} }

    5 測試代碼

    Aggregate ag = new ConcreteAggregate();ag.add("zzh");ag.add("jj");ag.add("qq");Iterator it = ag.iterator();while(it.hasNext()){System.out.println(it.next());}

    輸出:

    zzh jj qq

    優缺點
    優點:

  • 簡化了遍歷方式,對于對象集合的遍歷,還是比較麻煩的,對于數組或者有序列表,我們尚可以通過游標來取得,但用戶需要在對集合了解很清楚的前提下,自行遍歷對象,但是對于hash表來說,用戶遍歷起來就比較麻煩了。而引人了迭代器方法后,用戶用起來就簡單的多了。
  • 可以提供多種遍歷方式,比如說對有序列表,我們可以根據需要提供正序遍歷,倒序遍歷兩種迭代器,用戶用起來只需要得到我們實現好的迭代器,就可以方便的對集合進行遍歷了。
  • 封裝性良好,用戶只需要得到迭代器就可以遍歷,而對于遍歷算法則不用去關心。
  • 缺點:

  • 對于比較簡單的遍歷(像數組或者有序列表),使用迭代器方式遍歷較為繁瑣,比如ArrayList,用for循環的方式遍歷會更好一點,詳細可以參考《Java集合框架:ArrayList》

  • 適用場景
    ?迭代器模式是與集合共生共死的,一般來說,我們只要實現一個集合,就需要同時提供這個集合的迭代器,就像Java中的Collection,List,Set,Map等,這些集合都有自己的迭代器。假如我們要實現一個這樣的新的容器,當然也需要引入迭代器模式,給我們的容器實現一個迭代器。但是,由于容器與迭代器的關系太密切了,所以大多數語言在實現容器的時候都給提供了迭代器,并且這些語言提供的容器和迭代器在絕大多數情況下就可以滿足我們的需要,所以現在需要我們自己取實踐迭代器模式的場景還是比較少見的,我們只需要使用語言中已有的容器和迭代器就可以了。


    參考資料

  • 《23種設計模式》
  • 《23種設計模式(13):迭代器模式》
  • 《Java集合框架:ArrayList》
  • 歡迎跳轉到本文的原文鏈接:https://honeypps.com/design_pattern/iterator/

    歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。


    總結

    以上是生活随笔為你收集整理的设计模式:迭代器模式(Iterator)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。