标签: 设计模式
初识迭代器模式 定义提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示 。
结构和说明Iterator:
迭代器接口。定义访问和遍历元素的接口。
ConcreteIterator:
具体的迭代器实现对象。实现对聚合对象的遍历,并跟踪遍历时的当前位置。
Aggregate:
聚合对象。定义创建相应迭代器对象的接口。
ConcreteAggregate:
具体聚合对象。实现创建相应的迭代器对象。 /** * 迭代器接口,定义访问和遍历元素的操作 */ public interface Iterator { /** * 移动到聚合对象的第一个位置 */ public void first(); /** * 移动到聚合对象的下一个位置 */ public void next(); /** * 判断是否已经移动聚合对象的最后一个位置 * @return true表示已经移动到聚合对象的最后一个位置, * false表示还没有移动到聚合对象的最后一个位置 */ public boolean isDone(); /** * 获取迭代的当前元素 * @return 迭代的当前元素 */ public Object currentItem(); } ---------- /** * 具体迭代器实现对象,示意的是聚合对象为数组的迭代器 * 不同的聚合对象相应的迭代器实现是不一样的 */ public class ConcreteIterator implements Iterator { /** * 持有被迭代的具体的聚合对象 */ private ConcreteAggregate aggregate; /** * 内部索引,记录当前迭代到的索引位置。 * -1表示刚开始的时候,迭代器指向聚合对象第一个对象之前 */ private int index = -1; /** * 构造方法,传入被迭代的具体的聚合对象 * @param aggregate 被迭代的具体的聚合对象 */ public ConcreteIterator(ConcreteAggregate aggregate) { this.aggregate = aggregate; } public void first(){ index = 0; } public void next(){ if(index < this.aggregate.size()){ index = index + 1; } } public boolean isDone(){ if(index == this.aggregate.size()){ return true; } return false; } public Object currentItem(){ return this.aggregate.get(index); } } ---------- /** * 聚合对象的接口,定义创建相应迭代器对象的接口 */ public abstract class Aggregate { /** * 工厂方法,创建相应迭代器对象的接口 * @return 相应迭代器对象的接口 */ public abstract Iterator createIterator(); } ---------- /** * 具体的聚合对象,实现创建相应迭代器对象的功能 */ public class ConcreteAggregate extends Aggregate { /** * 示意,表示聚合对象具体的内容 */ private String[] ss = null; /** * 构造方法,传入聚合对象具体的内容 * @param ss 聚合对象具体的内容 */ public ConcreteAggregate(String[] ss){ this.ss = ss; } public Iterator createIterator() { //实现创建Iterator的工厂方法 return new ConcreteIterator(this); } /** * 获取索引所对应的元素 * @param index 索引 * @return 索引所对应的元素 */ public Object get(int index){ Object retObj = null; if(index < ss.length){ retObj = ss[index]; } return retObj; } /** * 获取聚合对象的大小 * @return 聚合对象的大小 */ public int size(){ return this.ss.length; } } ---------- public class Client { /** * 示意方法,使用迭代器的功能。 * 这里示意使用迭代器来迭代聚合对象 */ public void someOperation(){ String[] names = {"张三","李四","王五"}; //创建聚合对象 Aggregate aggregate = new ConcreteAggregate(names); //循环输出聚合对象中的值 Iterator it = aggregate.createIterator(); //首先设置迭代器到第一个元素 it.first(); while(!it.isDone()){ //取出当前的元素来 Object obj = it.currentItem(); System.out.println("the obj=="+obj); //如果还没有迭代到最后,那么就向下迭代一个 it.next(); } } public static void main(String[] args) { //可以简单的测试一下 Client client = new Client(); client.someOperation(); } } 体会迭代器模式 工资表数据的整合
这个项目的背景是这样的,项目的客户方收购了一家小公司,这家小公司有自己的工资系统,现在需要整合到客户方已有的工资系统上。
现在除了要把两个工资系统整合起来外,老板还希望能够通过决策辅助系统来统一查看工资数据,他不想看到两份不同的工资表。那么应该如何实现呢?