本篇內容主要講解“python中的迭代器模式的作用是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python中的迭代器模式的作用是什么”吧!
安國網(wǎng)站建設公司成都創(chuàng)新互聯(lián),安國網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為安國數(shù)千家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設要多少錢,請找那個售后服務好的安國做網(wǎng)站的公司定做!
(一)什么是迭代器模式
迭代器模式應該是23種設計模式中,程序員最容易理解的設計模式了,因為迭代器模式在日常的開發(fā)過程中經(jīng)常使用到。以最常見的循環(huán)為例:
for(int i=0;i上面的這段代碼通過循環(huán)逐一將arr的下標加1,從而實現(xiàn)了遍歷數(shù)組的功能。
但是通過循環(huán)實現(xiàn)遍歷的話依賴于集合對象內部,因此就有了一種能順序訪問集合對象中各個元素,又無需依賴對象內部表示的設計模式--迭代器模式。
(二)迭代器模式中的角色
迭代器模式中的角色主要有4種:
1、迭代器接口(Iterator):定義訪問和遍歷集合元素的接口,一般包含next()和hasNext()方法。
2、具體迭代器(ConcreteIterator):該角色用于實現(xiàn)迭代器接口,迭代器的核心遍歷邏輯在這里實現(xiàn)。
3、集合接口(Aggregate):集合接口定義了創(chuàng)建迭代器的接口方法,內部定義了iterator方法。
4、具體集合(ConcreteAggregate):該角色用于實現(xiàn)集合接口,他會創(chuàng)建出具體的Iterator角色。
看到這里如果你覺得比較疑惑不要緊,下面會通過代碼的方式來加深理解。
(三)迭代器模式的代碼實現(xiàn)
首先說一下這段代碼的場景,定義了一個教室的類,又定義了學生的類,實現(xiàn)遍歷教室中學生的功能。
代碼列表如下:
interface Aggregate:集合接口 interface Iterator:迭代器接口 class Classroom:教室類,實現(xiàn)集合接口,屬于具體的集合 class ClassroomIterator:教室迭代器,實現(xiàn)迭代器接口,屬于具體的迭代器 class Student:學生類首先把迭代器模式中的兩個接口角色定義出來:
public interface Aggregate { Iterator iterator(); } public interface Iterator { boolean hasNext(); Object next(); }接著定義學生類:
@Data @AllArgsConstructor public class Student { private String name; }接著定義教室類,在教室類中我們定義了Student集合,以及當前的集合長度和最大長度。同時實現(xiàn)Aggregate接口的iterator方法,這個方法將會返回一個迭代器對象。這個迭代器對象由ClassroomIterator提供
public class Classroom implements Aggregate{ private Student[] students; private int length=0; private int maxSize; public Classroom(int maxSize){ this.maxSize=maxSize; students=new Student[maxSize]; } public Student getStudent(int index){ return students[index]; } public boolean addStudent(Student student){ if (length>=maxSize){ return false; } this.students[length]=student; length++; return true; } public int getLength(){ return this.length; } @Override public Iterator iterator() { return new ClassroomIterator(this); } }最后就是ClassroomIterator對象了,ClassroomIterator屬于迭代器的具體實現(xiàn),這里需要實現(xiàn)hasNext方法和next方法
public class ClassroomIterator implements Iterator{ private Classroom classroom; private int index; public ClassroomIterator(Classroom classroom){ this.classroom=classroom; this.index=0; } @Override public boolean hasNext() { if (this.index最后就是使用了,通過迭代器對象,我們可以直接遍歷classroom對象:
public static void main(String[] args) { Classroom classroom=new Classroom(3); classroom.addStudent(new Student("張三")); classroom.addStudent(new Student("李四")); classroom.addStudent(new Student("王五")); Iterator iterator = classroom.iterator(); while (iterator.hasNext()){ Student next = (Student) iterator.next(); System.out.println(next.getName()); } }(四)迭代器模式的作用
看到這里很多人可能會有疑問,寫了一堆,用循環(huán)不是更方便嗎?迭代器模式最大的作用是將遍歷和具體的實現(xiàn)分開,以上面的測試方法為例,遍歷時我們始終只用到了iterator對象,而沒有用到classroom,這就意味著我們之后可以完全復用這段代碼實現(xiàn)遍歷。
另一方面,如果我們發(fā)現(xiàn)在classroom里使用數(shù)組存儲student,后續(xù)無法擴容,想改為List集合,這個時候我們只需要修改ClassroomIterator和Classroom這兩個具體實現(xiàn)角色即可。而不用對使用中的代碼做任何修改,就比如上面這段測試遍歷代碼不需要任何變動。如果用的是for循環(huán)或者while循環(huán),就意味著所有用到循環(huán)的地方都需要修改代碼。
(五)迭代器模式在源碼中的應用
迭代器模式的應用我們在敲代碼時肯定都用過,迭代器模式最佳實踐就是JDK中Iterator接口的設計
public interface Iterator{ boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } default void forEachRemaining(Consumer super E> action) { Objects.requireNonNull(action); while (hasNext()) action.accept(next()); } } 到此,相信大家對“python中的迭代器模式的作用是什么”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
網(wǎng)站題目:python中的迭代器模式的作用是什么
地址分享:http://weahome.cn/article/jsgcgh.html