• 设计模式(十一):迭代器模式


      定义:迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

      即不论对象内部的元素是以数组存放还是容器类型存放,都可以对外表现为迭代器形式。

      

    #include <iostream>
    #include <string>
    #include <assert.h>
    
    using namespace std;
    
    
    class MenuItem
    {
    public:
        MenuItem(){}
        MenuItem( string &name, string& des, bool ck, float pric );
        ~MenuItem(){}
    
        string& getItem()
        {
            return itemName;
        }
    
        string& getDes()
        {
            return description;
        }
    
        bool getCanCook()
        {
            return canCook;
        }
    
        float getPrice()
        {
            return price;
        }
    
    private:
        string itemName;
        string description;
        bool canCook;
        float price;
    };
    
    MenuItem::MenuItem( string &name, string& des, bool ck, float pric )
    {
        itemName = name;
        description = des;
        canCook = ck;
        price = pric;
    }
    
    class Iterator_MenuItem
    {
    public:
        Iterator_MenuItem(){}
        ~Iterator_MenuItem(){}
    
        virtual bool hasNext() = 0;
        virtual MenuItem* next() = 0;
    
        /* data */
    };
    
    #define MAX_ITEM 20
    
    class PancakeHouseMenu : public Iterator_MenuItem
    {
    public:
        PancakeHouseMenu();
        ~PancakeHouseMenu(){}
    
        bool hasNext();
        MenuItem* next();
    
        
    private:
        void addItem( string &name, string& des, bool ck, float pric );
    
    private:
        MenuItem* item[MAX_ITEM];
        int count;
        int iter;
    };
    
    PancakeHouseMenu::PancakeHouseMenu()
    {
        count = 0;
        iter = 0;
    
        addItem( ( string )"K&B's Breakfast.", ( string )"Panckes with scrambled eggs.", true, 2.99f );
        addItem( ( string )"Regular Pancake Breakfast.", ( string )"Panckes made with fresh blueberries.", false, 3.99f );
        addItem( ( string )"Waffles.", ( string )"Waffles, with your choice of blueberries or strawberries.", true, 1.99f );
    }
    
    void PancakeHouseMenu::addItem( string &name, string& des, bool ck, float pric )
    {
        MenuItem *pMenuItem = new MenuItem( name, des, ck, pric );
        item[count++] = pMenuItem;
    }
    
    bool PancakeHouseMenu::hasNext()
    {
        return iter < count ? true : false;
    }
    
    MenuItem* PancakeHouseMenu::next()
    {
        return item[iter++];
    }
    
    void TestIteratorPattern()
    {
        PancakeHouseMenu pa;
    
        MenuItem* pTemp = NULL;
    
        assert( true == pa.hasNext() );
        pTemp = pa.next();
        assert( ( string )"K&B's Breakfast." == pTemp->getItem() );
        assert( ( string )"Panckes with scrambled eggs." == pTemp->getDes() );
        assert( true == pTemp->getCanCook() );
        assert( 2.99f == pTemp->getPrice() );
    
    
        assert( true == pa.hasNext() );
        pTemp = pa.next();
        assert( ( string )"Regular Pancake Breakfast." == pTemp->getItem() );
        assert( ( string )"Panckes made with fresh blueberries." == pTemp->getDes() );
        assert( false == pTemp->getCanCook() );
        assert( 3.99f == pTemp->getPrice() );
    
    
        assert( true == pa.hasNext() );
        pTemp = pa.next();
        assert( ( string )"Waffles." == pTemp->getItem() );
        assert( ( string )"Waffles, with your choice of blueberries or strawberries." == pTemp->getDes() );
        assert( true == pTemp->getCanCook() );
        assert( 1.99f == pTemp->getPrice() );
    
    }
    
    int main()
    {
        TestIteratorPattern();
        return 0;
    }
  • 相关阅读:
    Linux环境下MySQL报Table 'xxx' doesn't exist错误解决方法
    mysql主主复制(双主复制)配置步骤
    MHA安装手记
    MySQL MHA配置
    innobackupex 还原和备份实例
    scp命令
    给想进入餐饮业新手一些建议
    mysql mha 主从自动切换 高可用
    mysql innobackupex xtrabackup 大数据量 备份 还原
    MySQL主从复制、半同步复制和主主复制概述
  • 原文地址:https://www.cnblogs.com/bracken/p/3073581.html
Copyright © 2020-2023  润新知