设计模式-11 迭代器模式

看了迭代器模式以后,我还是没有明白为什么要用这种模式。LinkedList和ArrayList的迭代器都是以内部类的形式。为什么要把这个迭代器单独拿出来?

类图
这里写图片描述

简单实现
要遍历英雄联盟里边的人物,一种方式是直接for循环遍历。另一种就是使用迭代器。当然也可以List自带的迭代器去遍历。这里我为了演示迭代器模式。所以用爹地器方式去实现。

容器内的元素

/**
 * 英雄
 */
public class Hero {

    /**
     * 英雄名字
     */
    private String name;
    /**
     * 英雄大招
     */
    private String Big;

    public Hero(String name, String big) {
        Big = big;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Hero [name=" + name + ", Big=" + Big + "]";
    }

}

迭代器

public interface Iiterator {
    /**
     * 是否有下个元素
     */
    boolean hasNext();

    /**
     * 返回当前位置的元素  将下标值移至下一位
     */
    Object next();
}

具体迭代器

/**
 * 英雄迭代器
 * 
 */
public class HeroIterator implements Iiterator {
    private List<Hero> list;
    private int index;

    public HeroIterator(List<Hero> list) {
        this.list = list;
    }

    public boolean hasNext() {
        return index <= list.size() - 1 && list.get(index) != null;
    }

    public Object next() {
        Hero hero = list.get(index);
        index++;
        return hero;
    }

}

容器

/**
 * 召唤师峡谷
 */
public interface IsummonersRefit {
    /**
     * 返回一个迭代器对象
     */
    Iiterator iterator();
}

容器实现

/**
 * 召唤师峡谷
 */
public class SummonerRefit implements IsummonersRefit {
    private List<Hero> list;

    public SummonerRefit(){
        initAllHeros();
    }

    private void initAllHeros() {
        list = new ArrayList<>();
        list.add(new Hero("卡特","死亡莲花"));
        list.add(new Hero("盖伦","德玛西亚正义"));
        list.add(new Hero("小鱼人","大鲨鱼"));
        list.add(new Hero("安妮","大狗熊"));
        list.add(new Hero("皇子","大锅扣"));
    }

    public Iiterator iterator() {
        return new HeroIterator(list);
    }

}

Client

/**
 * 玩家想看看有哪些英雄
 * @author YeLiang
 *
 */
public class Player {
    public static void main(String[] args) {
        SummonerRefit summonerRefit = new SummonerRefit();
        getAllhero(summonerRefit.iterator());
    }

    private static void getAllhero(Iiterator iterator){
        while(iterator.hasNext()){
            System.out.println(iterator.next().toString());
        }
    }

}

迭代器模式中,迭代器遍历容器时的核心思想就是每次根据容器下标获取相应的值。并让下边index++.然后下一次获取就是下一个元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值