迭代器模式 – 舔狗
首先定义舔狗对象
public class Flatterer {
public Flatterer(String name, Integer age) {
this.name = name;
this.age = age;
}
private String name;
private Integer age;
// Getter Setter
}
其次定义女神及实现
public interface Goddess {
void addFlatterer(Flatterer flatterer);
void removeFlatterer(Flatterer flatterer);
FlattererIterator getFlattererIterator();
}
public class FemaleSeaKing implements Goddess {
private List<Flatterer> flattererList;
public FemaleSeaKing() {
this.flattererList = new ArrayList<>();
}
@Override
public void addFlatterer(Flatterer flatterer) {
flattererList.add(flatterer);
}
@Override
public void removeFlatterer(Flatterer flatterer) {
flattererList.remove(flatterer);
}
@Override
public FlattererIterator getFlattererIterator() {
return new FlattererIteratorImpl(this.flattererList);
}
public void showFlattererNameList() {
System.out.println("舔狗名单:");
FlattererIterator flattererIterator = this.getFlattererIterator();
while (!flattererIterator.isLastFlatterer()) {
Flatterer flatterer = flattererIterator.nextFlatterer();
System.out.println(flatterer.getName());
}
}
}
最后定义舔狗迭代器及实现
public interface FlattererIterator {
/**
* 下一个舔狗
*/
Flatterer nextFlatterer();
/**
* 是否是最后一个舔狗
*/
boolean isLastFlatterer();
}
public class FlattererIteratorImpl implements FlattererIterator {
private List<Flatterer> flattererList;
private int position;
private Flatterer flatterer;
public FlattererIteratorImpl(List<Flatterer> flattererList) {
this.flattererList = flattererList;
}
@Override
public Flatterer nextFlatterer() {
System.out.println("第" + (position + 1) + "个舔狗。");
flatterer = flattererList.get(position);
position++;
return flatterer;
}
@Override
public boolean isLastFlatterer() {
if (position < flattererList.size()) {
return false;
}
return true;
}
}
测试类
public class Test {
public static void main(String[] args) {
FemaleSeaKing femaleSeaKing = new FemaleSeaKing();
femaleSeaKing.addFlatterer(new Flatterer("张三", 25));
femaleSeaKing.addFlatterer(new Flatterer("李四", 25));
femaleSeaKing.addFlatterer(new Flatterer("王五", 25));
femaleSeaKing.addFlatterer(new Flatterer("赵六", 25));
femaleSeaKing.addFlatterer(new Flatterer("孙七", 25));
femaleSeaKing.addFlatterer(new Flatterer("王八", 25));
femaleSeaKing.showFlattererNameList();
}
}
运行效果
舔狗名单:
第1个舔狗。
张三
第2个舔狗。
李四
第3个舔狗。
王五
第4个舔狗。
赵六
第5个舔狗。
孙七
第6个舔狗。
王八