美文网首页
Iterator Pattern

Iterator Pattern

作者: 杨志聪 | 来源:发表于2024-06-05 09:37 被阅读0次

    解决的问题

    浏览器的浏览记录,需要遍历浏览记录,但是又不想暴露保存浏览结构的数据结构;
    本质上也是数据的封装。

    代码

    BrowserHistory:

    package com.cong.designpattern.iterator;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class BrowserHistory {
        private List<String> urls;
        public BrowserHistory () {
            this.urls = new ArrayList<>();
        }
        public void push(String url) {
            this.urls.add(url);
        }
        public String pop() {
            if (this.urls.isEmpty()) return null;
    
            int lastIndex = this.urls.size() - 1;
            String lastUrl = this.urls.get(lastIndex);
            this.urls.remove(lastIndex);
    
            return lastUrl;
        }
        public Iterator getIterator() {
            return new ListIterator(this);
        }
        public List<String> getUrls() {
            return urls;
        }
    }
    

    Iterator:

    package com.cong.designpattern.iterator;
    
    public interface Iterator {
        public boolean hasNext();
        public void next();
        public String current();
    }
    

    ListIterator:

    package com.cong.designpattern.iterator;
    
    public class ListIterator implements  Iterator{
        private  BrowserHistory browserHistory;
        private int index = -1;
        public ListIterator(BrowserHistory browserHistory) {
            this.browserHistory = browserHistory;
        }
        @Override
        public boolean hasNext() {
            return index + 1 < browserHistory.getUrls().size();
        }
        @Override
        public void next() {
            index += 1;
        }
        @Override
        public String current() {
           if (index < browserHistory.getUrls().size()) return browserHistory.getUrls().get(index);
           return null;
        }
    }
    

    Test code:

    BrowserHistory browserHistory = new BrowserHistory();
    browserHistory.push("a");
    browserHistory.push("b");
    browserHistory.push("c");
    Iterator iterator = browserHistory.getIterator();
    while (iterator.hasNext()) {
        iterator.next();
        System.out.println(iterator.current());
    }
    

    UML

    Iterater Pattern UML

    相关文章

      网友评论

          本文标题:Iterator Pattern

          本文链接:https://www.haomeiwen.com/subject/wnduqjtx.html