迭代器模式iterator
//--------------------迭代器的接口-------------------------
package java_244_GOF23设计模式_迭代器模式_JDK内置迭代器_内部类迭代器_练习;
/**
-
自定义迭代器的接口
*/
public interface MyIterator {//MyIterator我的迭代器
void first();//最前面的;将游标指向第一个元素
void next();//紧接在后的;将游标指向下一个元素
boolean hasNext();//是否有下一个元素boolean isFirst();//是否第一个
boolean isLast();//是否最后一个Object getCurrentObj();//获取当前游标指向的对象
}
//----------------------自定义的聚合类-----正向---------
package java_244_GOF23设计模式_迭代器模式_JDK内置迭代器_内部类迭代器_练习;
import java.util.ArrayList;
import java.util.List;
/**
*自定义的聚合类;正向迭代器
*/
public class ConcreteMyAggregate {
//创建容器存储我们的对象
private List list = new ArrayList();
//增加方法
public void addObject(Object obj){//增加某个对象
this.list.add(obj);
}
public void removeObject(Object obj){//删除某个对象
this.list.remove(obj);
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
//获取迭代器;
public MyIterator createIterator(){//创建迭代器
return new ConcreteIterator();
}
//使用内部类定义迭代器,可以直接使用外部类的属性
private class ConcreteIterator implements MyIterator{
//创建游标
private int cursor;//cursor游标;定义游标用于记录遍历时的位置;默认位置为零
//实现相关方法
public void first() {
cursor = 0;
}
public Object getCurrentObj() {
return list.get(cursor);//获得当前游标指向对象
}
public boolean hasNext() {
//判断游标是否有下一个
if(cursor<list.size()){
return true;//小于,说明存在
}
return false;//否则不存在
}
public boolean isFirst() {
return cursor ==0?true:false;//如果等于0就是第一个;否则false
}
public boolean isLast() {
return cursor == (list.size()-1)?true:false;//是否是最后一个
}
public void next() {
if(cursor<list.size()){//判断是否是最后一个
cursor++;
}
}
}
}
//-----------------------测试---------------------
package java_244_GOF23设计模式_迭代器模式_JDK内置迭代器_内部类迭代器_练习;
/**
*测试
*/
public class Client {
public static void main(String[] args) {
ConcreteMyAggregate cma = new ConcreteMyAggregate();
cma.addObject(“aa”);
cma.addObject(“bb”);
cma.addObject(“cc”);
//获取迭代器
MyIterator iter = cma.createIterator();
//
while(iter.hasNext()){
System.out.println(iter.getCurrentObj());//获取当前游标
//获取后下移
iter.next();
}
}
}
//---------------------结果---------------------
//--------------------反向迭代器----------------------------
package java_244_GOF23设计模式_迭代器模式_JDK内置迭代器_内部类迭代器_练习;
import java.util.ArrayList;
import java.util.List;
/**
*自定义的聚合类–反向迭代器
*/
public class ConcreteMyAggregate2 {
//创建容器存储我们的对象
private List list = new ArrayList();
//增加方法
public void addObject(Object obj){//增加某个对象
this.list.add(obj);
}
public void removeObject(Object obj){//删除某个对象
this.list.remove(obj);
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
//获取迭代器;
public MyIterator createIterator(){//创建迭代器
return new ConcreteIterator();
}
//使用内部类定义迭代器,可以直接使用外部类的属性
private class ConcreteIterator implements MyIterator{
//创建游标
//private int cursor;//cursor游标;定义游标用于记录遍历时的位置;默认位置为零
//反向迭代器
private int cursor =list.size()-1;//cursor游标;反向位置开始
//实现相关方法
public void first() {
cursor = 0;
}
public Object getCurrentObj() {
return list.get(cursor);//获得当前游标指向对象
}
public boolean hasNext() {
//判断游标是否有下一个
if(cursor<list.size()){
return true;//小于,说明存在
}
return false;//否则不存在
}
public boolean isFirst() {
return cursor ==0?true:false;//如果等于0就是第一个;否则false
}
public boolean isLast() {
return cursor == (list.size()-1)?true:false;//是否是最后一个
}
public void next() {
if(cursor<list.size()){//判断是否是最后一个
//cursor++;
cursor--;
}
}
}
}
//---------------测试方法相同—修改下代码-------------------