Java 设计模式之迭代器模式

本文为笔者学习《Head First设计模式》的笔记,并加入笔者自己的理解和归纳总结

迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示。

构造器
在这里插入图片描述
有两个商店,分别采用数组(ArrayStore)和列表(ListStore)的方式存储商品。但为了访问方便,都会生成一个迭代器(Iterator)。

public interface Iterator {
    boolean haseNext();	
    Object next();	
}

public class ArrayStore {

    private String[] goodsArray;
    private int count;

    public ArrayStore() {
        goodsArray = new String[100];
        count = 0;
    }

    public void addGoods(String goods) {
        goodsArray[count] = goods;
        ++count;
    }

    public Iterator iterator() {
        return new ArrayStoreIterator(goodsArray, count);
    }

}

public class ListStore {
    private List<String> goodsList = new ArrayList<>();

    public void addGoods(String goods) {
        goodsList.add(goods);
    }

    public Iterator iterator() {
        return new ListStoreIterator(goodsList);
    }

}

数组商店迭代器(ArrayStoreIterator)和列表商店迭代器(ListStoreIterator

public class ArrayStoreIterator implements Iterator {

    private String[] goodsArray;
    private int count;
    private int index;

    ArrayStoreIterator(String[] goodsArray, int count) {
        this.goodsArray = goodsArray;
        this.count = count;
        index = -1;
    }

    @Override
    public boolean haseNext() {
        return index + 1 < count;
    }

    @Override
    public Object next() {
        index = index + 1;
        return goodsArray[index];
    }

}

public class ListStoreIterator implements Iterator {

    private List<String> goodsList;
    private int index;

    public ListStoreIterator(List<String> goodsList) {
        this.goodsList = goodsList;
        index = -1;
    }

    @Override
    public boolean haseNext() {
        return index + 1 < goodsList.size();
    }

    @Override
    public Object next() {
        index = index + 1;
        return goodsList.get(index);
    }

}

运行

public static void main(String[] args) {
    ArrayStore arrayStore = new ArrayStore();
    arrayStore.addGoods("goods1");
    arrayStore.addGoods("goods2");
    arrayStore.addGoods("goods3");

    System.out.print("ArrayStore have");
    for (Iterator iterator = arrayStore.iterator(); iterator.haseNext();) {
        System.out.print(" " + iterator.next());
    }
    System.out.println();

    ListStore listStore = new ListStore();
    listStore.addGoods("goods4");
    listStore.addGoods("goods5");
    System.out.print("ListStore have");
    for (Iterator iterator = listStore.iterator(); iterator.haseNext();) {
        System.out.print(" " + iterator.next());
    }
    System.out.println();
}

输出
在这里插入图片描述

相关文章
Java 设计模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值