今天我们来演绎一下设计模式中的迭代器模式。
首先我们来看一个故事。
缘起
话说悟空学成本领归来,要在花果山练出一批猴子大军,于是他册封了四个手下健将,马、流二元帅,崩、芭二将军,由他们带领底下的猴子进行操练。一段时间后,猴王决定检验他们的操练成果,每位将军都将从手下挑选出一批出色的猴子上台去给猴王展示武艺。
各显神通
这几位将军性格不同,对于手下的管理及组织自然也不同。
数组天下无敌
马、流二元帅,他们给每个猴子分配一个编号,猴子的编号从1开始,依次连续的向上叠加。组织报幕者需要通过报编号的方式,叫对应的猴子上台。
这个是马流二元帅的组织方式,使用数组列表
public class GeneralNumber {
private List<Monkey> soldiers = new ArrayList<>();
// 把猴子注册进去
public void registerSolider(Monkey newSolider) {
soldiers.add(newSolider);
}
// 该编号猴子组织变动,从下属里移除
public void removeSolider(int index) {
soldiers.remove(index);
}
public List<Monkey> getSoldiers() {
return soldiers;
}
public static GeneralNumber getInstance() {
GeneralNumber generalNumber = new GeneralNumber();
generalNumber.registerSolider(new Monkey("大猴子"));
generalNumber.registerSolider(new Monkey("二猴子"));
generalNumber.registerSolider(new Monkey("三猴子"));
generalNumber.registerSolider(new Monkey("四猴子"));
return generalNumber;
}
}
链表轻松愉快
崩、芭二将军,他们没有做什么编号,就是让手下的猴子一个个排好队,然后每次需要报幕者喊“下一个”,猴子们顺序上去就可以了。
下面是崩芭二将军的组织方式,使用链表
public class GeneralLink {
// 排在最前面的猴子
private Node headSolider;
private Node lastSolider;
public Node getHeadSolider() {
return headSolider;
}
// 把猴子注册进去(尾插法),不保证线程安全
public void registerSolider(Monkey newSolider) {
Node node = new Node(newSolider);
if (headSolider == null) {
headSolider = node;
lastSolider = node;
} else {
lastSolider.setNext(node);
lastSolider = node;
}
}
// 节点这个概念包含了排队猴子,以及猴子之间关联关系
static class Node {
// 代表当前真实的猴子
private Monkey solider;
// next代表后面的那只猴子,
private Node next;
public Node(Monkey solider) {
this.solider = solider;
}
public void setNext(Node next) {
this.next = next;
}
public Monkey getSolider() {
return solider;
}
public Node getNext() {
return next;
}
}
public static GeneralLink getInstance() {
GeneralLink generalLink = new GeneralLink();
generalLink.registerSolider(new Monkey("猴子A"));
generalLink.registerSolider(new Monkey("猴子B"));
generalLink.registerSolider(new Monkey("猴子C"));
generalLink.registerSol

最低0.47元/天 解锁文章
227

被折叠的 条评论
为什么被折叠?



