关于迭代器模式,我们所需要知道的第一件事情就是它依赖于一个名为迭代器的接口。一旦我们有了这个接口,就可以为各种那个对象集合实现迭代器:数组、列表、散列表。
项目实例我们就拿用户角色模块来举例
背景
1.某用户作为应用管理员获取一组关于管理角色的arraylist权限组
2.该用户作为应用开发者获取一组关于开发角色的数组形式的权限组
...
/// <summary>
/// 迭代器接口
/// </summary>
public interface RoleIterator
{
//返回一个布尔值,让客户知道是否还有更多的元素
bool hasnext();
//返回下一个元素
Object next();
}
/// <summary>
/// 为管理者服务的迭代器
public class ManagerRoleIterator : RoleIterator
ArrayList items;
int position = 0;
public ManagerRoleIterator(ArrayList RoleItems)
{
this.items = RoleItems;
}
public bool hasnext()
if (position >= items.Count || items[position] == null)
{
return false;
}
return true;
public Object next()
Object ri = items[position];
position++;
return ri;
/// 管理者
public class ManagerRole
public RoleIterator createIterator()
return new ManagerRoleIterator(items);
/// 为开发者服务的迭代器
public class DevelopRoleIterator : RoleIterator
RoleItem[] items;
public DevelopRoleIterator(RoleItem[] RoleItems)
if (position >= items.Length || items[position] == null)
RoleItem ri = items[position];
/// 开发者
public class DevelopRole
static int MAX_ITEMS = 6;
int numberofitems = 0;
return new DevelopRoleIterator(items);
/// 用户
public class UserRole
ManagerRole mrole;
DevelopRole drole;
public UserRole(ManagerRole mrole, DevelopRole drole)
this.mrole = mrole;
this.drole = drole;
public List<Object> getRole()
List<Object> lo = new List<object>();
RoleIterator mi = mrole.createIterator();
RoleIterator di = drole.createIterator();
lo.AddRange(getRole(mi));
lo.AddRange(getRole(di));
return lo;
public List<Object> getRole(RoleIterator ri)
List<Object> li = new List<object>();
while (ri.hasnext())
RoleItem ritem = (RoleItem)ri.next();
li.Add(ritem);
return li;
总结:迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。把访问的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所。
本文转自 熬夜的虫子 51CTO博客,原文链接:http://blog.51cto.com/dubing/712416