**:
概念:提供一種方法順序訪問乙個聚合物件中各個元素,而又不需暴露該物件的內部表示。
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
;#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()
這個模式,可能有一點繞,需要再仔細的思考一番。本來希望把模式的工作方式,用最簡單易懂的語言來總結,但其實這個總結更難。簡單的模式還容易些理解,也容易總結,複雜的就難了。打算在之後,學習資料結構的過程中,都總結出這樣一句話來。很期待後面對資料結構的學習,發現自己越來越愛學習了。
設計模式之迭代器模式
當你需要訪問乙個聚集物件,而且不管這些物件是什麼都需要遍歷的時候,而且可能對聚集有多種方式遍歷時,需要為遍歷不同的聚集結構提供如開始,下乙個,是否結束,當前哪一項等 統一介面,你就應該考慮用迭代器模式.提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示.uml設計圖 部分 ite...
設計模式之迭代器模式
說起迭代器,大家一定不陌生,經常使用的foreach in 這種迴圈就是,c 語言已經內建化了迭代器模式,主要是支援對非泛型集合的簡單迭代介面ieumerator和公開列舉數ienumerable。雖然內建了,但是這種模式也有我們學習的必要性。如下 using system using system...
設計模式之迭代器模式
迭代器模式有叫做游標 cursor 模式,是一種物件行為型模式,它提供一種方法順序訪問乙個聚合物件的各個元素,而不需要暴露該物件的內部表示。定義 提供一種方法順序訪問乙個聚合物件的各個元素,而不需要暴露該物件的內部表示。使用場景 訪問乙個聚合物件的內容而無需暴露它的內部表示。支援對聚合物件的多種遍歷...