// 先计算再获取
salaryManager.calcSalary();
System.out.println("新收购的公司工资列表");
test(salaryManager.createIterator());
}
/**
* 测试通过访问聚合对象的迭代器,是否能正常访问聚合对象
* @param it 聚合对象的迭代器
*/
private static void test(Iterator it) {
// 循环输出聚合对象中的值
// 首先设置迭代器到第一个元素
it.first();
while(!it.isDone()) {
// 取出当前元素
Object obj = it.currentItem();
System.out.println("the obj==" + obj);
// 如果还没有迭代到最后,那么就向下迭代一个
it.next();
}
}
}
package user;
import pattern.Iterator;
import pattern.PayManager;
import pattern.SalaryManager;
public class Client {
public static void main(String[] args) {
// 访问集团的工资列表
PayManager payManager = new PayManager();
// 先计算再获取
payManager.calcPay();
System.out.println("集团工资列表:");
test(payManager.createIterator());
// 访问新收购公司的工资列表
SalaryManager salaryManager = new SalaryManager();
// 先计算再获取
salaryManager.calcSalary();
System.out.println("新收购的公司工资列表");
test(salaryManager.createIterator());
}
/**
* 测试通过访问聚合对象的迭代器,是否能正常访问聚合对象
* @param it 聚合对象的迭代器
*/
private static void test(Iterator it) {
// 循环输出聚合对象中的值
// 首先设置迭代器到第一个元素
it.first();
while(!it.isDone()) {
// 取出当前元素
Object obj = it.currentItem();
System.out.println("the obj==" + obj);
// 如果还没有迭代到最后,那么就向下迭代一个
it.next();
}
}
}
@@@模式的实现:
1. 迭代器围绕着“访问”可以延伸出许多功能;
2. 有内部迭代器和外部迭代器之分;
@@@模式的优点:
1. 更好的封装性;
2. 可以以不同的遍历方式来遍历一个聚合;
3. 迭代器简化了聚合的接口;
4. 简化客户端调用;
5. 同一个聚合上可以有多个遍历
@@@模式的缺点:
NA
@@@模式的本质:
控制访问聚合对象中的元素。
@@@模式体现的设计原则:
单一职责原则