<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Chan Chen Coding...

    Twelve: Iterator Design Pattern

    Iterator (aka Cursor) Overview

    One object can traverse all of the elements of another object.




    DvdListIterator.java - the Iterator Interface

    package behavioral.interator.pattern;

    public interface DvdListIterator {

        public void first();

        public void next();

        public boolean isDone();

        public String currentItem();
    }

    DvdList.java - the Concrete Aggregate (with a Concrete Iterator inner class)

    package behavioral.interator.pattern;

    public class DvdList {

        private String[]    titles;

        private int                titleCount;

        private int                arraySize;

        public DvdList() {
            titles = new String[3];
            titleCount = 0;
            arraySize = 3;
        }

        public int count() {
            return titleCount;
        }

        public void append(String titleIn) {
            if (titleCount >= arraySize) {
                String[] tempArray = new String[arraySize];
                for (int i = 0; i < arraySize; i++) {
                    tempArray[i] = titles[i];
                }
                titles = null;
                arraySize = arraySize + 3;
                titles = new String[arraySize];
                for (int i = 0; i < (arraySize - 3); i++) {
                    titles[i] = tempArray[i];
                }
            }
            titles[titleCount++] = titleIn;
        }

        public void delete(String titleIn) {
            boolean found = false;
            for (int i = 0; i < (titleCount - 1); i++) {
                if (found == false) {
                    if (titles[i].equals(titleIn)) {
                        found = true;
                        titles[i] = titles[i + 1];
                    }
                } else {
                    if (i < (titleCount - 1)) {
                        titles[i] = titles[i + 1];
                    } else {
                        titles[i] = null;
                    }
                }
            }

            if (found == true) {
                --titleCount;
            }
        }

        public DvdListIterator createIterator() {
            return new InnerIterator();
        }

        private class InnerIterator implements DvdListIterator {
            private int    currentPosition    = 0;

            private InnerIterator() {
            }

            public void first() {
                currentPosition = 0;
            }

            public void next() {
                if (currentPosition < (titleCount)) {
                    ++currentPosition;
                }
            }

            public boolean isDone() {
                if (currentPosition >= (titleCount)) {
                    return true;
                } else {
                    return false;
                }
            }

            public String currentItem() {
                return titles[currentPosition];
            }
        }
    }


    Try the Design Patterns Video Tutorial from SourceMaking

    TestDvdIterator.java - testing the iterator

    package behavioral.interator.pattern;

    public class TestDvdIterator {
        public static void main(String[] args) {
            DvdList fiveShakespeareMovies = new DvdList();
            fiveShakespeareMovies.append("10 Things I Hate About You");
            fiveShakespeareMovies.append("Shakespeare In Love");
            fiveShakespeareMovies.append("O (2001)");
            fiveShakespeareMovies.append("American Pie 2");
            fiveShakespeareMovies.append("Scotland, PA.");
            fiveShakespeareMovies.append("Hamlet (2000)");

            DvdListIterator fiveShakespeareIterator = fiveShakespeareMovies.createIterator();
            while (!fiveShakespeareIterator.isDone()) {
                System.out.println(fiveShakespeareIterator.currentItem());
                fiveShakespeareIterator.next();
            }

            fiveShakespeareMovies.delete("American Pie 2");

            System.out.println(" ");
            fiveShakespeareIterator.first();
            while (!fiveShakespeareIterator.isDone()) {
                System.out.println(fiveShakespeareIterator.currentItem());
                fiveShakespeareIterator.next();
            }
        }
    }

    Test Results

    10 Things I Hate About You
    Shakespeare In Love
    O (2001)
    American Pie 2
    Scotland, PA.
    Hamlet (2000)
     
    10 Things I Hate About You
    Shakespeare In Love
    O (2001)
    Scotland, PA.
    Hamlet (2000)

    UML

    UML for Iterator

    References



    -----------------------------------------------------
    Silence, the way to avoid many problems;
    Smile, the way to solve many problems;

    posted on 2012-11-06 10:49 Chan Chen 閱讀(262) 評論(0)  編輯  收藏 所屬分類: Design Pattern

    主站蜘蛛池模板: 亚洲色少妇熟女11p| 国产成人精品男人免费| 国产亚洲综合久久系列| 人人鲁免费播放视频人人香蕉| 永久黄网站色视频免费| 亚洲精品无播放器在线播放| 成人毛片18女人毛片免费视频未| 亚洲日韩乱码中文无码蜜桃| 99久久久国产精品免费牛牛四川| 久久亚洲春色中文字幕久久久 | 最近2019中文字幕免费看最新| 亚洲高清无在码在线电影不卡| 5555在线播放免费播放| 亚洲日本国产乱码va在线观看| 免费在线观看视频网站| 亚洲精品福利你懂| 一个人免费观看www视频在线| 亚洲一卡一卡二新区无人区| 女人18毛片特级一级免费视频| 亚洲色无码国产精品网站可下载| 在线成人a毛片免费播放| 亚洲爆乳精品无码一区二区| 免费在线观看的黄色网址| 中文字幕免费视频精品一| 亚洲成AV人片在WWW色猫咪| 69视频在线观看高清免费| 亚洲伊人久久大香线蕉影院| 日日夜夜精品免费视频| 色爽黄1000部免费软件下载| 亚洲日产韩国一二三四区| 巨波霸乳在线永久免费视频 | 久久久亚洲欧洲日产国码二区 | 免费中文字幕在线| 国产成人高清精品免费观看| 亚洲精品国产成人99久久| 成**人免费一级毛片| 国产高清视频免费在线观看| 久久综合亚洲鲁鲁五月天| 国产又黄又爽又猛的免费视频播放| 精品国产福利尤物免费| 亚洲伊人久久大香线蕉结合|