上了這么多年學(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)接口類(lèi):
public interface Teacher {
public Iterator createIterator(); //點(diǎn)名
}
2、具體的老師(ConcreteTeacher)類(lèi)是對(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)接口類(lèi):
public interface Iterator {
void first(); //第一個(gè)
void next(); //下一個(gè)
boolean isDone(); //是否點(diǎn)名完畢
Object currentItem(); //當(dāng)前同學(xué)的出勤情況
}
4、具體的點(diǎn)名(ConcreteIterator)類(lèi)是對(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è)試類(lèi):
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ì)客戶(hù)端是沒(méi)有影響的。