背景
迭代器模式用途广泛,比如武器库的武器要展示出来,供机师们选择。
实现
武器类
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]
总结
迭代器模式没什么可说的,经常对集合进行迭代应该不陌生。