设计模式—行为型—迭代模式

设计模式行为型

1.观察者模式

2.模板模式

3.策略模式

4.职责链模式

5.状态模式

6.迭代器模式

7.访问者模式

8.备忘录模式

9.命令模式

10.解释器模式

11.中介模式

迭代模式:

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

它可以使得对于聚合对象的遍历行为和聚合对象分离,即我们不关心聚合对象的底层结构是什么样子

迭代模式中的角色

迭代器角色(Iterator): 负责定义访问和遍历元素的接口。
具体迭代器角色(Concrete Iterator):实现迭代器接口,并要记录遍历中的当前位置。
容器角色(Container):  负责提供创建具体迭代器角色的接口。
具体容器角色(Concrete Container):实现创建具体迭代器角色的接口, 这个具体迭代器角色与该容器的结构相关。

  迭代器接口:

package com.sun.iteration;

public interface Iterator {

	public Object first();

	public Object next();

	public boolean isDone();

	public Object currentItem();

}

    具体迭代器

package com.sun.iteration;

import java.util.Vector;

public class ConcreteIterator implements Iterator {
	// 当前索引值
	private int current = 0;

	// 被遍历集合
	private Vector vector = null;

	public ConcreteIterator(Vector vector) {
		super();
		this.vector = vector;
	}

	/**
	 * 获取第一个元素
	 */
	@Override
	public Object first() {
		current = 0;
		return vector.get(0);
	}

	/**
	 * 获取下一个元素
	 */
	@Override
	public Object next() {
		// TODO Auto-generated method stub
		Object o = null;
		if (vector.size() > current) {
			o = vector.get(current);
		}
		current++;
		return o;
	}

	/**
	 * 判断是否遍历结束
	 */
	@Override
	public boolean isDone() {
		// TODO Auto-generated method stub
		return current >= vector.size();
	}

	/**
	 * 当前数据元素
	 */
	@Override
	public Object currentItem() {
		// TODO Auto-generated method stub
		return vector.get(current);
	}

}

容器接口

 

package com.sun.iteration;

public interface Aggregat {
	 public Iterator createIterator();
}

具体容器实现

 

package com.sun.iteration;

import java.util.Vector;

public class ConcreteAggregat implements Aggregat{
	
	private Vector vector = null;

    public Vector getVector()
    {
        return vector;
    }

    public void setVector(Vector vector)
    {
        this.vector = vector;
    }

    public ConcreteAggregat( Vector vector)
    {
        this.vector = vector;
    }

    @Override
    public Iterator createIterator()
    {
        return new ConcreteIterator(vector);
    }
    
    //测试
    public static void main(String[] args) {
		Vector<String> v = new Vector<String>();
		v.add("data----1");
		v.add("data----2");
		v.add("data----3");
		ConcreteAggregat ca = new ConcreteAggregat(v);
		Iterator i = ca.createIterator();
		while(!i.isDone()) {
			System.out.println(i.next());
		}
	}
}

打印结果:

data----1
data----2
data----3

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值