Java設(shè)計(jì)模式之迭代模式(Iterator模式)介紹
上了這么多年學(xué),我發(fā)現(xiàn)一個(gè)問題,好象老師都很喜歡點(diǎn)名,甚至點(diǎn)名都成了某些老師的嗜好,一日不點(diǎn)名,就飯吃不香,覺睡不好似的,我就覺得很奇怪,你的課要是講的好,同學(xué)又怎么會(huì)不來聽課呢,殊不知:“誤人子弟,乃是犯罪!”啊。
好了,那么我們現(xiàn)在來看老師這個(gè)點(diǎn)名過程是如何實(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 = {"張三來了","李四來了","王五沒來"}; //同學(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é)出勤集合的大小,也就是說要知道班上有多少人
}
}
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、編寫測(cè)試類:
public class Test {
private Iterator it;
private Teacher teacher = new ConcreteTeacher();
public void operation(){
it = teacher.createIterator(); //老師開始點(diǎn)名
while(!it.isDone()){ //如果沒點(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、說明:
A:定義:Iterator模式可以順序的訪問一個(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ì)象中有變化是,比如說同學(xué)出勤集合中有加入了新的同學(xué),或減少同學(xué)時(shí),這種改動(dòng)對(duì)客戶端是沒有影響的。
- 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ī)制
- 使用迭代器模式來進(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?導(dǎo)出Excel增加下拉框選項(xiàng)
這篇文章主要介紹了Java?導(dǎo)出Excel增加下拉框選項(xiàng),excel對(duì)于下拉框較多選項(xiàng)的,需要使用隱藏工作簿來解決,使用函數(shù)取值來做選項(xiàng),下文具體的操作詳情,需要的小伙伴可以參考一下2022-04-04
linux的shell命令檢測(cè)某個(gè)java程序是否執(zhí)行
ps -ef |grep java|grep2016-04-04
Java文件選擇對(duì)話框JFileChooser使用詳解
這篇文章主要介紹了Java文件選擇對(duì)話框JFileChooser使用詳解的相關(guān)資料,需要的朋友可以參考下2015-07-07
詳解AngularJs與SpringMVC簡(jiǎn)單結(jié)合使用
本篇文章主要介紹了AngularJs與SpringMVC簡(jiǎn)單結(jié)合使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
Java?web實(shí)現(xiàn)購(gòu)物車案例
這篇文章主要為大家詳細(xì)介紹了Java?web實(shí)現(xiàn)購(gòu)物車案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
解決Mybatis-Plus更新方法不更新NULL字段的問題
這篇文章主要介紹了解決Mybatis-Plus更新方法不更新NULL字段的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

