• 行为型模型 迭代器模式


    行为型模型 迭代器模式

     GOOD:提供一种方法顺序访问一个聚敛对象的各个元素,而又不暴露该对象的内部表示。 

    为遍历不同的聚集结构提供如开始,下一个,是否结束,当前一项等统一接口。

    Iterator(迭代器接口):
            该接口必须定义实现迭代功能的最小定义方法集
            比如提供hasNext()和next()方法。
    ConcreteIterator(迭代器实现类):
            迭代器接口Iterator的实现类。可以根据具体情况加以实现。
    Aggregate(容器接口):
            定义基本功能以及提供类似Iterator iterator()的方法。
    concreteAggregate(容器实现类):
            容器接口的实现类。必须实现Iterator iterator()方法。

    /**
     * 行为型模型 迭代器模式
     * Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式。
     *
     */
    
    #define _CRT_SECURE_NO_WARNINGS
    
    #include <iostream>
    #include <string>
    
    typedef int Object;
    #define SIZE 5
    
    class MyIterator
    {
    public:
        virtual void First() = 0;
        virtual void Next() = 0;
        virtual bool IsDone() = 0;
        virtual Object Currentitem() = 0;
        virtual ~MyIterator() {}
    };
    
    class Aggregate
    {
    public:
        virtual Object getItem(int index) = 0;
        virtual MyIterator *CreateIterator() = 0;
        virtual int getSize() = 0;
        virtual ~Aggregate() {}
    };
    
    class ContreteIierator: public MyIterator
    {
    public:
        ContreteIierator(Aggregate *ag)
        {
            _ag = ag;
            _idx = 0;
        }
        ~ContreteIierator()
        {
            _ag = nullptr;
            _idx = 0;
        }
        virtual void First() override
        {
            _idx = 0;
        }
        virtual void Next() override
        {
            if (_idx < _ag->getSize())
            {
                _idx++;
            }
        }
        virtual bool IsDone() override
        {
            return (_idx == _ag->getSize());
        }
        virtual Object Currentitem() override
        {
            return _ag->getItem(_idx);
        }
    private:
        int _idx;
        Aggregate * _ag;
    };
    
    class ConcreateAggregate: public Aggregate
    {
    public:
        ConcreateAggregate()
        {
            for (int i = 0; i < SIZE; i++)
            {
                object[i] = i+1;
            }
        }
        ~ConcreateAggregate()
        {
            for (int i = 0; i < SIZE; i++)
            {
                object[i] = 0;
            }
        }
        virtual Object getItem(int index) override
        {
            return object[index];
        }
        virtual MyIterator *CreateIterator() override
        {
            return new ContreteIierator(this);
        }
        virtual int getSize() override
        {
            return SIZE;
        }
    
    private:
        Object object[SIZE];
    };
    
    
    void mytest()
    {
        // 创建一个集合
        Aggregate *ag = new ConcreateAggregate();
        // 创建一个遍历这个集合的迭代器
        MyIterator *it = ag->CreateIterator();
    
        // 通过迭代器遍历集合
        for (; !(it->IsDone()); it->Next())
        {
            std::cout << it->Currentitem() << " ";
        }
        std::cout << std::endl;
    
        // 清理相关资源
        delete it;
        delete ag;
    
        return;
    }
    
    int main()
    {
        mytest();
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    2013.4.15 Particle Swarm Optimization with Skyline Operator for Fast Cloudbased Web Service Composition
    Adaptive service composition in flexible processes
    2013.4.13 DomainSpecific Service Selection for Composite Services
    2013.4.14 Modeling and Algorithms for QoSAware Service Composition in VirtualizationBased Cloud Computing
    2013.5.29 Towards Networkaware Service Composition in the Cloud
    Efficient algorithms for Web services selection with endtoend QoS constraints
    SQL Server中常用的SQL语句
    接口限流自定义注解
    linux服务器生产环境搭建
    MVEL自定义函数重复掉用报错:duplicate function
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7783871.html
Copyright © 2020-2023  润新知