例题:餐厅菜单新需求导致的遍历困难
添加餐后甜点子菜单
结构抽象
需要用树形结构,节点是菜单或子菜单,叶子是菜单项
需要能够在各个菜单项之间游走,遍历
要能够有弹性的在菜单项之间游走
组合模式设计方案
类图
迭代器
public class ComposeIterator implements Iterator
{
private Stack<Iterator> stack=new Stack<Iterator>();
public ComposeIterator(Iterator iterator)
{
stack.push(iterator);
}
@Override
public boolean hasNext()
{
if(stack.empty())
{
return false;
}
Iterator iterator=stack.peek();
if(!iterator.hasNext())
{
stack.pop();
return hasNext();
}
else
{
return true;
}
}
@Override
public Object next()
{
if(hasNext())
{
Iterator iterator=stack.peek();
MenuComponent menuComponent=(MenuComponent)iterator.next();
stack.push(menuComponent.getIterator());
return menuComponent;
}
return null;
}
}
SubMenu里面
public Iterator getIterator() {
return new ComposeIterator(menuItems.iterator());
}
Code Adrress:
http://download.csdn.net/detail/kaikai_sk/9874436