国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

Java設(shè)計(jì)模式之迭代模式(Iterator模式)介紹

2019-11-26 15:16:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

上了這么多年學(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):

復(fù)制代碼 代碼如下:

public interface Teacher {
    public Iterator createIterator(); //點(diǎn)名
}

2、具體的老師(ConcreteTeacher)類(lèi)是對(duì)老師(Teacher)接口的實(shí)現(xiàn):
復(fù)制代碼 代碼如下:

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):
復(fù)制代碼 代碼如下:

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):
復(fù)制代碼 代碼如下:

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)

復(fù)制代碼 代碼如下:

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)有影響的。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 商南县| 界首市| 景德镇市| 桂平市| 娄底市| 泸西县| 新丰县| 门源| 彝良县| 满城县| 绥宁县| 娄烦县| 进贤县| 新源县| 汽车| 武冈市| 大理市| 建始县| 卓尼县| 江油市| 盐城市| 马边| 莒南县| 西和县| 绍兴市| 瓮安县| 兴隆县| 泽普县| 阳朔县| 昌吉市| 赣榆县| 封丘县| 兴文县| 北票市| 巴彦淖尔市| 灵台县| 金川县| 葵青区| 霍州市| 潜山县| 漳浦县|