<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

    主站蜘蛛池模板: 美女免费精品高清毛片在线视| 亚洲大尺码专区影院| 亚洲国产另类久久久精品| 亚洲综合成人网在线观看| 亚洲欧洲日产国码二区首页| 亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网 | 精品亚洲永久免费精品| 四虎免费影院ww4164h| 午夜免费福利影院| 亚洲欧洲精品成人久久奇米网| 亚洲色婷婷综合久久| 久久国产亚洲高清观看| 亚洲日韩精品国产3区| 一级毛片**免费看试看20分钟| 免费国产在线视频| 成年人网站免费视频| 国产午夜无码视频免费网站| 狠狠综合久久综合88亚洲| 亚洲成人网在线播放| 国产综合激情在线亚洲第一页 | 亚洲精品视频免费| 亚洲免费在线观看视频| 国产免费观看黄AV片| 亚洲AV午夜福利精品一区二区| 国产精品亚洲自在线播放页码| 九九久久国产精品免费热6| 99久在线国内在线播放免费观看| 女人张开腿给人桶免费视频| 国产亚洲大尺度无码无码专线| 亚洲制服丝袜在线播放| 免费一级特黄特色大片| 4虎1515hh永久免费| 亚洲第一永久AV网站久久精品男人的天堂AV | 日本在线看片免费| 曰皮全部过程视频免费国产30分钟| 中文字幕在线亚洲精品| 亚洲一区二区三区乱码在线欧洲| 久久久WWW成人免费精品| 成人超污免费网站在线看| 亚洲国产精品乱码一区二区| 亚洲精品第一国产综合亚AV|