设计模式之组合模式

来源:互联网 发布:淘宝企业店铺消失了 编辑:程序博客网 时间:2024/05/22 06:18

例题:餐厅菜单新需求导致的遍历困难

添加餐后甜点子菜单
这里写图片描述
结构抽象
这里写图片描述
需要用树形结构,节点是菜单或子菜单,叶子是菜单项
需要能够在各个菜单项之间游走,遍历
要能够有弹性的在菜单项之间游走

组合模式设计方案

这里写图片描述

类图

这里写图片描述

迭代器

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