c 設計模式之Iterator迭代器模式 txt

2021-07-25 15:57:04 字數 3398 閱讀 1221

設計模式c++學習筆記之十四(iterator迭代器模式)

14.1.解釋

概念:提供一種方法順序訪問乙個聚合物件中各個元素,而又不需暴露該物件的內部表示。

main(),客戶

iproject,產品介面

cproject,產品類

iiterator,迭代器介面

iprojectiterator,產品迭代器介面

cprojectiterator,產品迭代器實現類

說明:cproject實現產品類,能夠返回乙個迭代器的指標。這個迭代器將封裝產品類裡的乙個陣列。所以迭代器在執行next函式時,可以遍歷這個陣列的所有元素。

簡單來說,就是用**實現vector::iterator或vector::const_iterator。

我們來看**:

#pragma once

#include "iprojectiterator.h"

#include

using std::string;

class iproject

virtual ~iproject(void)

virtual void add(string name, int num, int cost) = 0;

virtual string getprojectinfo() = 0;

virtual iprojectiterator* getiterator() = 0;

virtual void erase() = 0;

};#pragma once

#include "iproject.h"

#include "iprojectiterator.h"

#include

#include

using std::string;

using std::vector;

class cproject :

public iproject

;#include "stdafx.h"

#include "project.h"

#include "..\commondeclare\convert.h"

#include "projectiterator.h"

#include

#include

using std::string;

using std::vector;

cproject::cproject( void )

cproject::cproject(string name, int num, int cost) :m_name(name), m_num(num), m_cost(cost)

cproject::~cproject(void)

string cproject::getprojectinfo()

void cproject::add( string name, int num, int cost )

iprojectiterator * cproject::getiterator()

void cproject::erase()

m_projectlist.clear();

}#pragma once

class iproject;

class iiterator

virtual ~iiterator(void)

virtual bool hasnext() = 0;

virtual iproject * next() = 0;

};#pragma once

#include "iiterator.h"

class iproject;

class iprojectiterator :

public iiterator

virtual ~iprojectiterator(void)

virtual bool hasnext() = 0;

virtual iproject * next() = 0;

};#pragma once

#include "iprojectiterator.h"

#include "iproject.h"

#include

using std::vector;

class cprojectiterator :

public iprojectiterator

;#include "stdafx.h"

#include "projectiterator.h"

cprojectiterator::cprojectiterator(vectorpl) : m_projectlist(pl)

cprojectiterator::~cprojectiterator(void)

bool cprojectiterator::hasnext()

iproject * cprojectiterator::next()

// iterator.cpp

#include "stdafx.h"

#include "iproject.h"

#include "project.h"

#include "..\commondeclare\convert.h"

#include "projectiterator.h"

#include

#include

using std::vector;

using std::cout;

using std::endl;

void doit()

vector::const_iterator projectit = projectlist.begin();

for (; projectit != projectlist.end(); projectit++)

cout << (*projectit)->getprojectinfo().c_str() << endl;

vector::reverse_iterator projectdelit = projectlist.rbegin();

for (; projectdelit != projectlist.rend(); projectdelit++)

projectlist.clear();

}void donew()

iprojectiterator *pprojectit = pproject->getiterator();

while(pprojectit->hasnext())

delete pprojectit;

pprojectit = null;

pproject->erase();

delete pproject;

pproject = null;

}int _tmain(int argc, _tchar* argv)

設計模式之迭代模式(Iterator)

意圖 提供一種順序訪問乙個聚合物件中各個元素,而不需要暴露聚合物件內部行為。即將列表的訪問和遍歷從列表物件中分離出來,放入迭代器物件中。使遍歷和列表物件介面。可產生乙個列表物件可以復用多個迭代器 多種遍歷方式 乙個迭代器支援多個列表物件 多個列表物件由相同遍歷演算法,或者列表物件本身提供演算法差異部...

Java設計模式之Iterator模式

概述 相信每個開發人員在開發中都會面臨各種複雜的業務邏輯,在解決這些問題時,初級開發人員會注重業務邏輯逐步實現功能,相信也會實現所要求的功能,但對於後期的維護個更新來說會變得相當麻煩,當業務邏輯改變時或是調整時,開發人員甚至會重寫才能滿足要求,而對於有經驗的開發人員來說會首先考慮能否用那種設計模式來...

設計模式 Iterator模式

迭代器模式,主要用於容器裡面元素的遍歷,其他地方用到的不多,這裡舉個例項,模仿jdk裡面迭代器的實現,當然我這裡並沒有把iterator方法抽象到iterable這個介面中,依據介面的設計原則,不要做乙個面面俱到的介面,而應該讓特定的介面完成特定的功能 以下是 示例,使用了之後,我們在測試 中,僅僅...