吼吼吼最近看到了一本《大话设计模式》,是真滴连我这种智商都能看懂(略懂)!然后激起了我学习的动力! 然后我要光速学习一些东西准备做大作业了!因为设计模式快结课了有些人只是水了好几周的网课啥也没学会。。
好的今天先看一下迭代器模式!
这是迭代器模式的结构图:
我们来实现一个遍历提醒小动物买票的实例!画个类图:
然后是java实现:
(1)Iterator(抽象迭代器类):
public abstract class Iterator {
//得到开始对象
public abstract Object First();
//得到下一个对象
public abstract Object Next();
//判断是否到达末尾
public abstract boolean IsDone();
//得到当前对象
public abstract Object CurrentItem();
}
(2)Aggregate(抽象聚集类):
public abstract class Aggregate {
//创建迭代器的函数
public abstract Iterator CreatIterator();
}
(3)ConcreteIterator(具体迭代器类):
public class ConcreteIterator extends Iterator {
//迭代器里有一个聚集对象
private ConcreteAggregate aggregate;
private int current = 0;
public ConcreteIterator(ConcreteAggregate c) {
this.aggregate = c;
}
@Override
public Object First() {
return aggregate.get(0);
}
@Override
public Object Next() {
//返回下一个对象,如果已经是最后一个则返回空值
current += 1;
if(current < aggregate.Count())
return aggregate.get(current);
return null;
}
@Override
public boolean IsDone() {
return current >= aggregate.Count() ? true:false;
}
@Override
public Object CurrentItem() {
return aggregate.get(current);
}
}
(4)ConcreteAggregate(具体聚集类):
import java.util.ArrayList;
public class ConcreteAggregate extends Aggregate{
private ArrayList items = new ArrayList();
@Override
public Iterator CreatIterator() {
return new ConcreteIterator(this);
}
public int Count() {
return items.size();
}
public Object get(int x) {
return items.get(x);
}
public void add(Object o) {
this.items.add(o);
}
}
(5)client类:
public class client {
public static void main(String[] args) {
ConcreteAggregate a = new ConcreteAggregate();
a.add("小狗");
a.add("小猫");
a.add("小兔子");
a.add("小狐狸");
a.add("小猴子");
a.add("小青蛙");
Iterator i = new ConcreteIterator(a);
Object item = i.First();
while(!i.IsDone()){
System.out.println(i.CurrentItem()+"请买票!");
i.Next();
}
}
}
好滴!明天再写仲裁者模式!!!(我一定会写的!嗯!