迭代器模式(Iterator) (一)

2014-11-24 10:14:28 · 作者: · 浏览: 4

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

@@@练习示例:
工资表数据的整合

@@@示例代码:
\pattern\PayModel.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


[java]
package pattern;

/**
* 工资描述模型对象
*/
public class PayModel {
/**
* 支付工资的人员
*/
private String userName;

/**
* 支付工资的数额
*/
private double pay;

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public double getPay() {
return pay;
}

public void setPay(double pay) {
this.pay = pay;
}

public String toString() {
return "userName=" + userName + ", pay=" + pay;
}
}

package pattern;

/**
* 工资描述模型对象
*/
public class PayModel {
/**
* 支付工资的人员
*/
private String userName;

/**
* 支付工资的数额
*/
private double pay;

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public double getPay() {
return pay;
}

public void setPay(double pay) {
this.pay = pay;
}

public String toString() {
return "userName=" + userName + ", pay=" + pay;
}
}

\pattern\Iterator.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[java]
package pattern;

/**
* 迭代器接口,定义访问和遍历元素的操作
*/
public interface Iterator {
/**
* 移动到聚合对象的第一个位置
*/
public void first();

/**
* 移动到聚合对象的下一个位置
*/
public void next();

/**
* 判断是否已经移动到聚合对象的最后一个位置
* @return true 表示已经移动到聚合对象的最后一个位置
* false 表示还没有移动到聚合对象的最后一个位置
*/
public boolean isDone();

/**
* 获取迭代的当前元素
* @return 迭代的当前元素
*/
public Object currentItem();
}

package pattern;

/**
* 迭代器接口,定义访问和遍历元素的操作
*/
public interface Iterator {
/**
* 移动到聚合对象的第一个位置
*/
public void first();

/**
* 移动到聚合对象的下一个位置
*/
public void next();

/**
* 判断是否已经移动到聚合对象的最后一个位置
* @return true 表示已经移动到聚合对象的最后一个位置
* false 表示还没有移动到聚合对象的最后一个位置
*/
public boolean isDone();

/**
* 获取迭代的当前元素
* @return 迭代的当前元素
*/
public Object currentItem();
}

\pattern\CollectionIteratorImpl.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


[java]
package pattern;

/**
* 用来实现访问Collection集合的迭代接口,为了外部统一访问方式
*/
public class CollectionIteratorImpl implements Iterator {
/**
* 用来存放被迭代的聚合对象
*/
private PayManager aggregate = null;

/**
* 用来记录当前迭代到的位置索引
* -1表示刚开始的时候,迭代器指向对和对象第一个对象之前
*/
private int index = -1;

public CollectionIteratorImpl(PayManager aggregate) {
this.aggregate = aggregate;
}

@Override
public void first() {
index = 0;
}

@Override
public void next() {
if (index < this.aggregate.size()) {
index = index + 1;
}
}

@Override
public boolean isDone() {
if (index == this.aggregate.size()) {
return true;
}

return false;
}

@Override
public Object currentItem() {
return this.aggregate.get(index);
}
}

package pattern;

/**
* 用来实现访问Collection集合的迭代接口,为了外部统一访问方式
*/
public class CollectionIteratorImpl implements Iterator {
/**
* 用来存放被迭代的聚合对象
*/
private PayManager aggregate = null;

/**
* 用来记录当前迭代到的位置索引
* -1表示刚开始的时候,迭代器指向对和对象第一个对象之前
*/
private int index = -1;

public CollectionIteratorImpl(PayManager aggregate) {
this.aggregate = aggreg