java_244_GOF23设计模式_迭代器模式_JDK内置迭代器_内部类迭代器_练习

迭代器模式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--;
		}
	}
}

}
//---------------测试方法相同—修改下代码-------------------
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值