设计模式[8]-Iterator

Type: Behavioral

Iterator:提供一个方法连续访问一个聚合对象的元素,同时不暴露其底层表示

#include <iostream>
using namespace std;
#define Data int
class Iterator
{
public:
    virtual Data* next()=0;
};  

class ConcreteIterator: public Iterator
{
public:
    ConcreteIterator(Data* data, int* size)
    {
        m_pData = data;
        m_pSize = size;
        mIndex = 0;
    };
    Data* next()
    {
        if(m_pData != NULL && mIndex < *m_pSize){
            return &m_pData[mIndex++];
        } else {
            return NULL;
        }
    };
private:
    int mIndex;
    Data* m_pData;
    int* m_pSize;
};  

class Aggregate
{
public:
    virtual Iterator* createIterator() = 0;
};  

class ConcreteAggregate: public Aggregate
{
public:
    ConcreteAggregate(int size)
    {
        mSize = size;
        mData = new Data[size];
        for(int i=0;i<size; i++)
            mData[i] = i;
    };
    Iterator* createIterator()
    {
        Iterator* iterator = new ConcreteIterator(this->mData, &this->mSize);
        return iterator;
    };
private:
    Data* mData;
    int mSize;
};  

int main()
{
    Aggregate* pAggregate = new ConcreteAggregate(4);
    Iterator*  pIterator  = pAggregate->createIterator();  

    Data* data;
    int count = 0;
    while (data = pIterator->next())
    {
        if(count ++ > 10)
            break;
        cout <<*data<<endl;
    }
    system("pause");
    return 0;
}
时间: 2024-11-02 17:39:47

设计模式[8]-Iterator的相关文章

设计模式之iterator模式到STL中iterator迭代器

设计模式之iterator模式到STL中iterator迭代器 近日看<设计模式:可复用面向对象软件的基础>一书中23种模式中就有iterator迭代模式,且篇幅颇大.机缘巧合.我在分析STL代码结构的时候,同样发现iterator迭代器,且占据相当大的地位. 从设计模式的角度来看iterator模式 ü     意图 提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露对象的内部表示.我想GOF 的意图这次说的很明白了,就是我想遍历一个聚合对象.但又隐藏内部实现.该怎么办呢?本模式主要

Java设计模式之Iterator模式介绍

所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式.本文以java中的容器为例,模拟Iterator的原理.需要的朋友可以参考下   1.首先定义一个容器Collection接口. 复制代码 代码如下: package com.njupt.zhb.learn.iterator; public interface Collection {  void add(Object o);  int size();  Iterator iterator(); } 2.定义一个I

【设计模式】Iterator迭代器设计模式(容器和容器的遍历)

在遍历容器元素的时候,有很多初学者在疑惑,为什么返回一个iterator我就能够去遍历这个容器了呢? 今天我们就来深入剖析一下迭代器iterator的设计模式(循序渐进的剖析,一定要耐心看完) iterator是"四人帮"所定义的23种设计模式之一(不太难,也不是非常重要,只是在遍历容器的时候能够用到) 首先需要读这个总结的同志掌握面向对象的思想. 1.我们先自己写一个可以动态添加对象的容器 建立一个新的Java工程:Iterator 创建一个包:cn.edu.hpu.iterator

Java设计模式之Iterator模式介绍_java

1.首先定义一个容器Collection接口. 复制代码 代码如下: package com.njupt.zhb.learn.iterator;public interface Collection { void add(Object o); int size(); Iterator iterator();} 2.定义一个Iterator迭代器的接口 复制代码 代码如下: package com.njupt.zhb.learn.iterator;public interface Iterator

【设计模式】Iterator设计作业-设计LinkedList的iterator

完成了上次迭代器设计的作业:http://blog.csdn.net/acmman/article/details/43920153 LinkedList也需要写一个iterator方法,返回一个实现了Iterator的对象.该如何写? LinkedList.java: package cn.edu.hpu.iterator; public class LinkedList implements Collection{ Node head=null;//头节点(以后的元素通过next得到) No

设计模式(Patterns in Java)

设计 板桥里人的设计模式讲解是国内媒体(包括书籍和网站)中最早的成体系介绍,本系列介绍纯为免费传播(转载本站文章,请保留作者和网址),尽量做到言简意赅,通俗易懂,但是难免有所疏漏敬请来信或论坛讨论,不断完善. 真正掌握设计模式需要在实践中不断研究和使用,关于设计模式在具体实例的应用,可以阅读板桥里人的书籍<Java实用系统开发指南>.书籍中8个实例都从设计模式.框架等高度对系统进行崭新的设计和实现,这种应用理念正是现在以及将来软件设计和编程的根本之道. 1:前言 学习GoF设计模式的重要性 建

Java设计模式学习心得

整个设计模式贯穿一个原理:面对介面编程,而不是面对实现,(面向物件编程应该改爲面向介面编程).目标原则是:降低耦合,增强灵活性. 一.创建模式 1.设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁. 2.设计模式之Prototype(原型) 用原型实例指定创建物件的种类,並且通过拷贝这些原型创建新的物件. 3.设计模式之Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件複杂的工作,Builder模式就是将这两种情况分开进行

Java集合Iterator迭代的实现方法_java

我们常常使用 JDK 提供的迭代接口进行 Java 集合的迭代. Iterator iterator = list.iterator(); while(iterator.hasNext()){ String string = iterator.next(); //do something } 迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式.Iterator 模式是用于遍历集合类的标准访问方法.它可以把访问逻辑从不同类型的集合类中抽象出来

设计模式的解析和实现(C++)之十八-Iterator模式

作用: 提供一种方法顺序访问一个聚合对象中各个元素,,而又不需暴露该对象的内部表示. UML结构图: 解析: Iterator几乎是大部分人在初学C++的时候就无意之中接触到的第一种设计模式,因为在STL之中,所有的容器类都有与之相关的迭代器.以前初学STL的时候,时常在看到讲述迭代器作用的时候是这么说的:提供一种方式,使得算法和容器可以独立的变化,而且在访问容器对象的时候不必暴露容器的内部细节,具体是怎么做到这一点的呢?在STL的实现中,所有的迭代器(Iterator)都必须遵照一套规范,这套