public abstract class Aggregate {
/**
* 工厂方法,创建相应迭代子对象的接口
* @return
*/
public abstract Iterator createIterator();
}
public class ConcreateAggregate extends Aggregate {
private Object[] objArray=null;
/**
* 构造方法,传入聚合对象的具体内容
* @return
*/
public ConcreateAggregate(Object[] objArray){
this.objArray=objArray;
}
@Override
public Iterator createIterator() {
return new ConcreteIterator(this);
}
/**
* 取值方法:向外界提供聚集元素
*/
public Object getElement(int index){
if (index<objArray.length){
return objArray[index];
}else{
return null;
}
}
/**
* 取值方法:向外界提供聚集的大小
*/
public int size(){
return objArray.length;
}
}
public interface Iterator {
/**
* 迭代方法:移动到第一个元素
*/
public void first();
/**
* 迭代方法:移动到下一个元素
*/
public void next();
/**
* 迭代方法:是否为最后一个元素
*/
public Boolean isDone();
/**
* 迭代方法:返还当前元素
*/
public Object currentItem();
}
public class ConcreteIterator implements Iterator {
//持有被迭代的具体的聚合对象
private ConcreateAggregate agg;
//内部索引,记录当前迭代到的索引位置
private int index = 0;
//记录当前聚集对象的大小
private int size = 0;
public ConcreteIterator(ConcreateAggregate agg){
this.agg=agg;
this.size=agg.size();
index=0;
}
/**
* 迭代方法:移动到第一个元素
*/
@Override
public void first() {
index=0;
}
/**
* 迭代方法:移动到下一个元素
*/
@Override
public void next() {
if (index<size){
index++;
}
}
/**
* 迭代方法:是否为最后一个元素
*/
@Override
public Boolean isDone() {
return (index>=size);
}
/**
* 迭代方法:返回当前元素
* @return
*/
@Override
public Object currentItem() {
return agg.getElement(index);
}
}
/**
* 迭代子模式(Iterator)
*/
public class IteratorMethodActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_iterator_method);
Object [] objArray={"One","Two","Three","Four","Five","Six"};
//创建聚合对象
Aggregate agg=new ConcreateAggregate(objArray);
//循环输出聚合对象中的值
Iterator it=agg.createIterator();
while (!it.isDone()){
Toast.makeText(this, it.currentItem()+"", Toast.LENGTH_SHORT).show();
it.next();
}
}
}
github地址:https://github.com/zyj18410105150/DesignMode点击打开链接