設計模式之迭代器模式

2021-06-16 08:12:11 字數 1952 閱讀 7037

**:

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

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 模式,是一種物件行為型模式,它提供一種方法順序訪問乙個聚合物件的各個元素,而不需要暴露該物件的內部表示。定義 提供一種方法順序訪問乙個聚合物件的各個元素,而不需要暴露該物件的內部表示。使用場景 訪問乙個聚合物件的內容而無需暴露它的內部表示。支援對聚合物件的多種遍歷...