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點擊打開鏈接