设计模式学习专栏九--------迭代器模式

2019-03-12  本文已影响0人  你的头发真的好长

设计模式学习专栏九--------迭代器模式

名称 : 迭代器模式(Iterator)

价值观念: 管理良好的集合

场景


爆炸性新闻: 对象村餐厅和煎饼屋餐厅屋合并了 , 我们打算用煎饼屋的菜单当早餐 , 用对象村餐厅的菜单当中餐.

可是 ...

煎饼屋的菜单用集合来存储 , 对象村餐厅使用数组来存储... 它们都不想改变自己的存储结构, 因为有本身很多代码都依赖于原有的数据结构

那么, 合并后的餐厅的菜单打印功能怎么实现呢?

女招待的代码如下

public void printMenu2() {
        PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu();
        ArrayList<MenuItem> breakfastItems =pancakeHouseMenu.getMenuItems();

        DinerMenu dinerMenu = new DinerMenu();
        MenuItem[] lunchItems = dinerMenu.getMenuItems();
        
        for (int i=0;i<breakfastItems.size();i++){
            MenuItem menuItem = breakfastItems.get(i);
            System.out.println(menuItem.getName()+" ");
            System.out.println(menuItem.getPrice()+" ");
            System.out.println(menuItem.getDescription()+" ");
        }

        for (int i=0;i<lunchItems.length;i++){
            MenuItem menuItem = lunchItems[i];
            System.out.println(menuItem.getName()+" ");
            System.out.println(menuItem.getPrice()+" ");
            System.out.println(menuItem.getDescription()+" ");
        }
    }

如何解决


尝试封装遍历的部分

image image

我们做了什么

迭代器模式总览


定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示
(即封装遍历, 将遍历元素的动作抽取出来, 将女招待解耦了.女招待无需知道菜单列表是如何被实现的)

​ 并且,这样的话外面的客户就不能自己控制遍历过程了

案例代码部分

参考

​ 书籍: HeadFirst设计模式

​ 代码参考地址: 我就是那个地址

上一篇 下一篇

猜你喜欢

热点阅读