迭代器模式
迭代器模式又称为游标模式,是行为型设计模式之一。迭代器模式算是一个比较古老的设计模式,其源于
对容器的访问,比如List、Map、数组等,我们知道对容器的访问必然会涉及到遍历算法,我们可以将
遍历的方法封装在容器中,或者不提供遍历算法。如果我们将遍历的方法封装到容器中,那么对于容器类来说就承担
了过多的功能,容器类不仅要维护自身内部的数据元素而且还要对外提供遍历的接口方法,因为遍历状态的存储问题
还不能对同一个容器同时进行对个遍历操作,如果我们不提供遍历方法而让使用者自己去实现,又会让容器内部细节暴露
无遗,正因与此迭代模式应运而生。
# 定义 #
提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。
# 使用场景 #
遍历一个容器对象时。
下面来看一组代码实战一下
//员工实体类
public class Employee {
private String name;
private String work;
private int age;
/**
* @param name
* @param work
* @param age
*/
public Employee(String name, String work, int age) {
super();
this.name = name;
this.work = work;
this.age = age;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @return the work
*/
public String getWork() {
return work;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
}
//迭代器接口
public interface Iterator {
/**
* 是否还有下一个数据
* @return
*/
boolean hasNext();
/**
* 返回当前位置的元素,并将位置移至下一位置
* @return
*/
Object next();
}
//员工信息容器 创建一个对应的迭代器
public class CifzIterator implements iteratorpattern.Iterator {
private List<Employee> employees;
private int position;
/**
* @param employees
*/
public CifzIterator(List<Employee> employees) {
super();
this.employees = employees;
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return !(position > employees.size() - 1 || employees.get(position) == null);
}
@Override
public Object next() {
// TODO Auto-generated method stub
Employee e = employees.get(position);
position ++;
return e;
}
}
//容器类的接口 返回一个容器迭代器
public interface Company {
iteratorpattern.Iterator iterator();
}
//容器类 实现容器接口
public class CompanyCifz implements Company {
private List<Employee> employees = new ArrayList<>();
/**
*
*/
public CompanyCifz() {
super();
// TODO Auto-generated constructor stub
employees.add(new Employee("哈哈哈", "hh", 24));
employees.add(new Employee("哈哈哈1", "hh1", 24));
employees.add(new Employee("哈哈哈2", "hh2", 24));
employees.add(new Employee("哈哈哈3", "hh3", 24));
employees.add(new Employee("哈哈哈4", "hh4", 24));
employees.add(new Employee("哈哈哈5", "hh5", 24));
}
/**
* @return the employees
*/
public List<Employee> getEmployees() {
return employees;
}
@Override
public Iterator iterator() {
// TODO Auto-generated method stub
return new CifzIterator(employees);
}
}
//客户端调用
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
CompanyCifz companyMin = new CompanyCifz();
check(companyMin.iterator());
}
/**
* @param iterator
*/
private static void check(Iterator iterator) {
// TODO Auto-generated method stub
while (iterator.hasNext()) {
Employee employee = (Employee) iterator.next();
System.out.println(employee.getName()+employee.getWork()+employee.getAge());
}
}
}
这仅仅是个一个假设,演示一下迭代器模式的实现。
现在大多高级语言都有内置的迭代器 对于我们开发来说极少会自己去实现迭代器了。