设计模式----迭代器模式(JAVA)

  • 时间:
  • 来源:互联网
  • 文章标签:

模式简析

/**
 * 
 */
/**
 * 迭代器模式
 * 动机:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
 * 解决的问题:不同的方式来遍历整个整合对象。
 * 优点: 
 * 1、它支持以不同的方式遍历一个聚合对象。 
 * 2、迭代器简化了聚合类。 3、在同一个聚合上可以有多个遍历。 
 * 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
 * 缺点:
 * 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
 * 使用场景: 
 * 1、访问一个聚合对象的内容而无须暴露它的内部表示。 
 * 2、需要为聚合对象提供多种遍历方式。 
 * 3、为遍历不同的聚合结构提供一个统一的接口。
 * 注意:
 * 迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据 
 * 
 *  
 *
 */
import java.util.ArrayList;
import java.util.List;

/*
 * 乘坐公交车买票问题
 */
public class Demo1 {
	public static void main(String[] args) {
		ConcreteAggregate ca = new ConcreteAggregate();
		ca.ADD("张三");
		ca.ADD("李四");
		ca.ADD("王五");
		
		Iterator i =new ConcreteIterator(ca);
		while(!i.IsDone()) {
			System.out.println(i.CurrentItem()+"请买票");
			i.Next();
		}
	}
}
abstract class Iterator{
	public abstract Object First();
	public abstract Object Next();
	public abstract boolean IsDone();
	public abstract Object CurrentItem();
}
abstract class Aggregate{
	public abstract Iterator CreateIterator();
}
class ConcreteIterator extends Iterator{
	private ConcreteAggregate aggregate;
	private int current = 0;
	
	public ConcreteIterator(ConcreteAggregate aggregate) {
		super();
		this.aggregate = aggregate;
	}

	@Override
	public Object First() {
		// TODO Auto-generated method stub
		return aggregate.Getindex(0);
	}

	@Override
	public Object Next() {
		// TODO Auto-generated method stub
		Object o =null;
		if(current<aggregate.Count()-1) {
			o = aggregate.Getindex(current);
			
		}
		current++;
		return o;
	}

	@Override
	public boolean IsDone() {
		// TODO Auto-generated method stub
		
		return current>=aggregate.Count()?true:false;
	}

	@Override
	public Object CurrentItem() {
		return aggregate.Getindex(current);
	}
	
}
class ConcreteAggregate extends Aggregate{
	private List<Object> items = new ArrayList<Object>();
	
	@Override
	public Iterator CreateIterator() {
		// TODO Auto-generated method stub
		return new ConcreteIterator(this);
	}
	public void ADD(Object o) {
		this.items.add(o);
	}
	public int Count() {
		return this.items.size();
	}
	public Object Getindex(int index) {
		return this.items.get(index);
	}
	public void SetIndex(int index,Object value) {
		this.items.set(index, value);
	}
}

在这里插入图片描述

本文链接http://www.taodudu.cc/news/show-82972.html