Java设计模式-迭代器模式

文章目录

背景

迭代器模式用途广泛,比如武器库的武器要展示出来,供机师们选择。

实现

武器类

public class Weapon {
    
    private String name;
    
    // 格斗or射击
    private String type;
    
    // 伤害
    private String damage;
    
    // 数量
    private String count;
    
    public Weapon(String name, String type, String damage, String count) {
        super();
        this.name = name;
        this.type = type;
        this.damage = damage;
        this.count = count;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getDamage() {
        return damage;
    }

    public void setDamage(String damage) {
        this.damage = damage;
    }

    public String getCount() {
        return count;
    }

    public void setCount(String count) {
        this.count = count;
    }

    @Override
    public String toString() {
        return "Weapon [name=" + name + ", type=" + type + ", damage=" + damage + ", count=" + count + "]";
    }
    
}

迭代器接口

public interface Iterator {

    boolean hasNext();
    
    Object next();
    
}

武器迭代器

public class WeaponIterator implements Iterator {
    
    private List<Weapon> weapons;
    
    public WeaponIterator(List<Weapon> weapons) {
        super();
        this.weapons = weapons;
    }
    
    private int position = 0;

    @Override
    public boolean hasNext() {
        if (null != weapons && position <= weapons.size() - 1) {
            return true;
        }
        return false;
    }

    @Override
    public Object next() {
        Weapon weapon = weapons.get(position);
        position++;
        return weapon;
    }

}

武器库

public class WeaponStore {
    
    private List<Weapon> weapons;

    public WeaponStore(List<Weapon> weapons) {
        super();
        this.weapons = weapons;
    }

    public WeaponStore() {
        super();
    }

    public List<Weapon> getWeapons() {
        return weapons;
    }

    public void setWeapons(List<Weapon> weapons) {
        this.weapons = weapons;
    }

    @Override
    public String toString() {
        return "WeaponStore [weapons=" + weapons + "]";
    }
    
    public Iterator getWeaponIterator() {
        return new WeaponIterator(weapons);
    }
}

测试类

public class Test {
    
    public static void main(String[] args) {
        WeaponStore weaponStore = new WeaponStore();
        List<Weapon> weapons = new ArrayList<>();
        weapons.add(new Weapon("狮子王剑", "格斗", "4700", "1"));
        weapons.add(new Weapon("重力子炮", "射击", "5000", "1"));
        weapons.add(new Weapon("无声回旋镖", "射击", "4300", "2"));
        weapons.add(new Weapon("重力冲击打桩机", "格斗", "4700", "3"));
        
        weaponStore.setWeapons(weapons);
        
        Iterator iterator = weaponStore.getWeaponIterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
    
}

测试结果

Weapon [name=狮子王剑, type=格斗, damage=4700, count=1]
Weapon [name=重力子炮, type=射击, damage=5000, count=1]
Weapon [name=无声回旋镖, type=射击, damage=4300, count=2]
Weapon [name=重力冲击打桩机, type=格斗, damage=4700, count=3]
总结

迭代器模式没什么可说的,经常对集合进行迭代应该不陌生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值