1. 程式人生 > >行為型模型 叠代器模式

行為型模型 叠代器模式

use efi blog 順序 first bject _id 開始 iostream

行為型模型 叠代器模式

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; }

行為型模型 叠代器模式