行为型模式之迭代器模式

迭代器模式iterator

提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。又称为游标cursor模式

  • 聚合对象:储存数据
  • 迭代器:遍历对象

核心角色

1.Iterator(迭代器)
迭代器定义访问和遍历元素的接口
2.ConcreteIterator (具体迭代器),可以作为ConcreteAggregate的内部类
具体迭代器实现迭代器接口
对该聚合遍历时跟踪当前位置
3.ConcreteAggregate (具体聚合)
具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例

package com.liang.iterator;

/**
 * @author Administrator
 *迭代器
 */
public interface MyIterator {
	void first();
	void last();
	void next();
	boolean isFirst();
	boolean isLast();
	boolean hasNext();
	Object getCurrectObj();
	int getCursor();
	
	
}


package com.liang.iterator;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Administrator
 *具体聚合
 */
public class ConcreteAggregate {
	private List<Object> list =new ArrayList<>();
	
	public void addObject(Object obj) {
		list.add(obj);
	}
	public void removeObject(int index) {
		list.remove(index);
	}
	
	public MyIterator createIterator() {
		return new ConcreteIterator();
	}
	//具体迭代器,ConcreteAggregate的内部类
	private class ConcreteIterator implements MyIterator{
		private int cursor;
		@Override
		public void first() {
			cursor=0;
		}

		@Override
		public void last() {
			cursor=list.size()-1;
		}

		@Override
		public void next() {
			cursor++;
		}

		@Override
		public boolean isFirst() {
			return cursor==0?true:false;
			
		}

		@Override
		public boolean isLast() {
			return cursor==(list.size()-1)?true:false;
			
		}

		@Override
		public boolean hasNext() {
			if(cursor<(list.size())) {
				return true;
			}
			return false;
		}

		@Override
		public Object getCurrectObj() {
			return list.get(cursor);
		}
		
		public int getCursor() {
			return cursor;
			
		}
		
	}
}

public class Client {
	public static void main(String[] args) {
		ConcreteAggregate ca=new ConcreteAggregate();
		ca.addObject("ada");
		ca.addObject("adasd");
		ca.addObject("adsadadada");
		
		MyIterator iterator = ca.createIterator();
		while(iterator.hasNext()) {
			System.out.println(iterator.getCursor());
			System.out.println(iterator.getCurrectObj());
			iterator.next();
		}
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值