行为型模型 迭代器模式

行为型模型 迭代器模式

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;
}
时间: 2024-08-30 07:04:01

行为型模型 迭代器模式的相关文章

行为型模型 模版模式

行为型模型 模版模式 应用场景 Template Method模式一般应用在具有以下条件 的应用中:        - 具有统一的操作步骤或操作过程         - 具有不同的操作细节         - 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同总结:        在抽象类中统一操作步骤,并规定好接口:让子类实现接口.这样可以把各个具体的子类和操作步骤接耦合 AbstractClass:        抽象类的父类 ConcreteClass:         具

行为型模型 策略模式

行为型模型 策略模式 Strategy:        策略(算法)抽象. ConcreteStrategy         各种策略(算法)的具体实现. Context         策略的外部封装类,或者说策略的容器类.根据不同策略执行不同的行为.策略由外部环境决定. 好处:         //算法的实现 和 客户端的使用 解耦合         //使得算法变化,不会影响客户端 适用于:         准备一组算法,并将每一个算法封装起来,使得它们可以互换. /** * 行为型模型

行为型模型 状态模式

行为型模型 状态模式 Context:用户对象        拥有一个State类型的成员,以标识对象的当前状态: State:接口或基类         封装与Context的特定状态相关的行为: ConcreteState:接口实现类或子类         实现了一个与Context某个状态相关的行为. 适用于:         对象的行为,依赖于它所处的当前状态.行为随状态改变而改变的场景. /** * 行为型模型 状态模式 * State模式也叫状态模式,是行为设计模式的一种. * St

行为型模型 命令模式

行为型模型 命令模式 Command         Command命令的抽象类. ConcreteCommand         Command的具体实现类. Receiver         需要被调用的目标对象. Invorker         通过Invorker执行Command对象. 适用于:         是将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. /** * 行为型模型 命令模式 * Command模

行为型模型 备忘录模式

行为型模型 备忘录模式 应用场景 如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式. 1)一个类需要保存它的对象的状态(相当于Originator角色) 2)设计一个类,该类只是用来保存上述对象的状态(相当于Memento角色) 3)需要的时候,Caretaker角色要求Originator返回一个Memento并加以保存 4)undo或rollback操作时,通过Caretaker保存的Memento恢复Originator对象的状

设计模式(行为型)之迭代器模式(Iterator Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之观察者模式(Observer Pattern)>http://blog.csdn.net/yanbober/article/details/45484749 概述 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构

设计模式(行为型)之策略模式(Strategy Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之迭代器模式(Iterator Pattern)>http://blog.csdn.net/yanbober/article/details/45497881 概述 使用策略模式可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封

行为型模式之迭代器模式

概述 在软件开发中,我们经常需要使用聚合对象来存储一系列数据.聚合对象拥有两个职责:一是存储数据:二是遍历数据.从依赖性来看,前者是聚合对象的基本职责:而后者既是可变化的,又是可分离的.因此,可以将遍历数据的行为从聚合对象中分离出来,封装在一个被称之为“迭代器”的对象中,由迭代器来提供遍历聚合对象内部数据的行为,这将简化聚合对象的设计,更符合“单一职责原则”的要求. 定义 迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cu

设计模式17:Iterator 迭代器模式(行为型模式)

Iterator 迭代器模式(行为型模式) 动机(Motivation) 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码可以透明地访问其包含的元素:同时这种“透明变量”也为“同一种算法在多种集合对象上进行操作”提供了可能. 使用面向对象技术使这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方式. 意图(Intent)提供一种方法顺序访问一个聚合对象中各个元素 , 而又不需暴露该对象的内部表示.——