<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 閱讀(263) 評論(0)  編輯  收藏 所屬分類: Design Pattern

    主站蜘蛛池模板: 免费国产黄网站在线观看视频| 在线视频亚洲一区| 在线观看特色大片免费网站| 内射无码专区久久亚洲| 亚洲影院天堂中文av色| 在线观看免费毛片| 国产偷国产偷亚洲清高APP| 国产福利免费观看| 野花视频在线官网免费1| 亚洲AV成人精品日韩一区18p| 亚洲av永久无码| 亚洲国产午夜福利在线播放| 一级一级一级毛片免费毛片| 国产av无码专区亚洲av果冻传媒| 成在线人视频免费视频| 国产精品亚洲一区二区三区在线 | 亚洲av无码不卡一区二区三区| 精品人妻系列无码人妻免费视频| 亚洲人成人77777网站| 日本高清不卡aⅴ免费网站| 亚洲人成电影福利在线播放| 国产一卡2卡3卡4卡无卡免费视频| 亚洲深深色噜噜狠狠网站| 色播在线永久免费视频| 国产精品亚洲片在线花蝴蝶 | 久久成人国产精品免费软件| 亚洲一区二区三区亚瑟| 国产一区二区三区在线免费| 99精品免费视品| 亚洲人成免费网站| 免费在线观看毛片| 99视频在线免费| 在线精品自拍亚洲第一区| 久久夜色精品国产亚洲| 114一级毛片免费| 一边摸一边桶一边脱免费视频| 无码乱人伦一区二区亚洲一| 性xxxx视频播放免费| 中国性猛交xxxxx免费看| 综合自拍亚洲综合图不卡区| 国产麻豆剧传媒精品国产免费|