設計模式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這個介面中,依據介面的設計原則,不要做乙個面面俱到的介面,而應該讓特定的介面完成特定的功能 以下是 示例,使用了之後,我們在測試 中,僅僅...