Java設(shè)計(jì)模式之迭代模式(Iterator模式)介紹
上了這么多年學(xué),我發(fā)現(xiàn)一個(gè)問(wèn)題,好象老師都很喜歡點(diǎn)名,甚至點(diǎn)名都成了某些老師的嗜好,一日不點(diǎn)名,就飯吃不香,覺(jué)睡不好似的,我就覺(jué)得很奇怪,你的課要是講的好,同學(xué)又怎么會(huì)不來(lái)聽(tīng)課呢,殊不知:“誤人子弟,乃是犯罪!”啊。
好了,那么我們現(xiàn)在來(lái)看老師這個(gè)點(diǎn)名過(guò)程是如何實(shí)現(xiàn)吧:
1、老規(guī)矩,我們先定義老師(Teacher)接口類:
public interface Teacher {
public Iterator createIterator(); //點(diǎn)名
}
2、具體的老師(ConcreteTeacher)類是對(duì)老師(Teacher)接口的實(shí)現(xiàn):
public class ConcreteTeacher implements Teacher{
private Object[] present = {"張三來(lái)了","李四來(lái)了","王五沒(méi)來(lái)"}; //同學(xué)出勤集合
public Iterator createIterator(){
return new ConcreteIterator(this); //新的點(diǎn)名
}
public Object getElement(int index){ //得到當(dāng)前同學(xué)的出勤情況
if(index<present.length){
return present[index];
}
else{
return null;
}
}
public int getSize(){
return present.length; //得到同學(xué)出勤集合的大小,也就是說(shuō)要知道班上有多少人
}
}
3、定義點(diǎn)名(Iterator)接口類:
public interface Iterator {
void first(); //第一個(gè)
void next(); //下一個(gè)
boolean isDone(); //是否點(diǎn)名完畢
Object currentItem(); //當(dāng)前同學(xué)的出勤情況
}
4、具體的點(diǎn)名(ConcreteIterator)類是對(duì)點(diǎn)名(Iterator)接口的實(shí)現(xiàn):
public class ConcreteIterator implements Iterator{
private ConcreteTeacher teacher;
private int index = 0;
private int size = 0;
public ConcreteIterator(ConcreteTeacher teacher){
this.teacher = teacher;
size = teacher.getSize(); //得到同學(xué)的數(shù)目
index = 0;
}
public void first(){ //第一個(gè)
index = 0;
}
public void next(){ //下一個(gè)
if(index<size){
index++;
}
}
public boolean isDone(){ //是否點(diǎn)名完畢
return (index>=size);
}
public Object currentItem(){ //當(dāng)前同學(xué)的出勤情況
return teacher.getElement(index);
}
}
5、編寫(xiě)測(cè)試類:
public class Test {
private Iterator it;
private Teacher teacher = new ConcreteTeacher();
public void operation(){
it = teacher.createIterator(); //老師開(kāi)始點(diǎn)名
while(!it.isDone()){ //如果沒(méi)點(diǎn)完
System.out.println(it.currentItem().toString()); //獲得被點(diǎn)到同學(xué)的情況
it.next(); //點(diǎn)下一個(gè)
}
}
public static void main(String agrs[]){
Test test = new Test();
test.operation();
}
}
6、說(shuō)明:
A:定義:Iterator模式可以順序的訪問(wèn)一個(gè)聚集中的元素而不必暴露聚集的內(nèi)部情況。
B:在本例中,老師(Teacher)給出了創(chuàng)建點(diǎn)名(Iterator)對(duì)象的接口,點(diǎn)名(Iterator)定義了遍歷同學(xué)出勤情況所需的接口。
C:Iterator模式的優(yōu)點(diǎn)是當(dāng)(ConcreteTeacher)對(duì)象中有變化是,比如說(shuō)同學(xué)出勤集合中有加入了新的同學(xué),或減少同學(xué)時(shí),這種改動(dòng)對(duì)客戶端是沒(méi)有影響的。
- Java集合框架中迭代器Iterator解析
- 輕松掌握J(rèn)ava迭代器模式
- 詳解Java中Iterator迭代器的用法
- 詳解Java中的迭代迭代器Iterator與枚舉器Enumeration
- Java使用設(shè)計(jì)模式中迭代器模式構(gòu)建項(xiàng)目的代碼結(jié)構(gòu)示例
- java集合迭代器Iterator中的remove陷阱
- 解析Java的迭代器中的fast-fail錯(cuò)誤檢測(cè)機(jī)制
- 使用迭代器模式來(lái)進(jìn)行Java的設(shè)計(jì)模式編程
- 淺談java Iterator.remove()方法的用法(詳解)
- java集合_淺談Iterable和Iterator的區(qū)別
- Java集合Iterator迭代的實(shí)現(xiàn)方法
- java使用iterator遍歷指定目錄示例分享
- Java實(shí)現(xiàn)的自定義迭代器功能示例
相關(guān)文章
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(38)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07
SpringBoot如何實(shí)現(xiàn)持久化登錄狀態(tài)獲取
這篇文章主要介紹了SpringBoot 如何實(shí)現(xiàn)持久化登錄狀態(tài)獲取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Spring Cache + Caffeine的整合與使用示例詳解
對(duì)于一些項(xiàng)目里需要對(duì)數(shù)據(jù)庫(kù)里的某些數(shù)據(jù)一直重復(fù)請(qǐng)求的,且這些數(shù)據(jù)基本是固定的,在這種情況下,可以借助簡(jiǎn)單使用本地緩存來(lái)緩存這些數(shù)據(jù),本文介紹一下Spring Cache和Caffeine的使用,感興趣的朋友一起看看吧2023-12-12
Java通過(guò)接口實(shí)現(xiàn)匿名類的實(shí)例代碼
這篇文章介紹了Java通過(guò)接口實(shí)現(xiàn)匿名類的實(shí)例代碼,有需要的朋友可以參考一下2013-10-10
Mybatis之foreach標(biāo)簽內(nèi)傳入list為空的問(wèn)題
這篇文章主要介紹了Mybatis之foreach標(biāo)簽內(nèi)傳入list為空的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03

