美文网首页
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