迭代器模式
iterator
模式也叫迭代模式,是行為模式之一,他把對容器種包含的內部物件的訪問委讓給外部類,使用iterator
按順序進行遍歷訪問的設計模式。
在使用iterator
模式之前,首先應該明白iterator
模式是用來解決什麼問題的。或者說如果不使用iterator
模式會存在什麼問題。
由容器自己實現順序遍歷。直接在容器類裡新增順序遍歷方法
讓呼叫者自己實現遍歷,直接暴露資料細節給外部
以上實現方法存在的問題:
方法1,容器承擔了太多的功能,一方面需要提供新增刪除等本身應有的功能,一方面還需要提供遍歷訪問功能。
方法2,旺旺容器實現遍歷的過程中,需要儲存遍歷的狀態,當跟元素的新增刪除等功能夾雜在一起很容易引起混亂和程式執行錯誤等。
iterator
模式就是為了有效地處理按順序進行遍歷訪問的一種設計模式,簡單地說 ,iterator
模式提供一種有效的方法,可以遮蔽聚集物件集合的容器類的實現細節,而能對容器內包含的物件元素按順序進行有效的遍歷訪問。所以,iterator
模式的應用場景可以歸納為滿足以下幾個條件:
iterator
(迭代器介面):
該介面必須定義實現迭代功能的最小定義方法集,比如提供hasnext
()和next
()方法。
concreteiterator
(迭代器實現類):
迭代器介面iterator
的實現類。可以根據具體情況加以實現。
aggregate
(容器介面):
定義基本功能以及提供類似 iterator iterator()的方法。
concreteaggregate
(容器實現類):
容器介面的實現類。必須實現iterator
iterator
()方法。
說明:在迭代器中 持有 乙個集合的 引用;所以通過迭代器,就可以訪問集合
//
// created by andrew on 2020/11/29.
//#include
using
namespace std;
typedef
int object;
#define size 5
class
myiterator
;class
aggregate
;// 進行迭代的地方
class
concreteiterator
:public myiterator
virtual
void
first()
virtual
void
next()
}virtual
bool
isdone()
virtual object currentitem()
private
:int _current_index;
aggregate *_ag;};
// 儲存需要迭代的內容
class
concreteaggregate
:public aggregate
} myiterator *
createiterator
() override
object getitem
(int index) override
intgetsize
() override
private
: object object[size];}
;int
main
(int argc,
char
*ar**)
delete myiterator;
delete aggregate;
cout <<
"iterator demo"
<< endl;
return0;
}
23種設計模式C 原始碼與UML實現 原型模式
原型模式 乙個複雜物件,具有自我複製功能,統一一套介面。原型模式主要面對的問題是 某些結構複雜的物件的建立工作,由於需求的變化,這些物件進場面對著劇烈的變化,但是他們卻擁有比較一致的介面。原型模式 prototype pattern 是用於建立重複的物件,同時又能保證效能。這種型別的設計模式屬於建立...
23種設計模式C 原始碼與UML實現 組合模式
組合模式 composite模式也叫做組合模式,是構造型的設計模式之一。通過遞迴的手段構造樹形的物件結構,並可以通過乙個物件來訪問整個物件樹。component樹形結構的節點抽象 leaf樹形結構的葉節點 composite樹形結構的枝節點 適用於 單個物件的使用具有一致性,將物件組合成樹形結構表示...
23種設計模式C 原始碼與UML實現 解釋模型
解釋模型 一些應用提供了內建的指令碼或者巨集語言來讓使用者可以定義它們能夠在系統中進行的操作。interpreter模式的目的就是使用乙個直譯器為使用者提供乙個一門定義語言的語法表示的直譯器,然後通過這個直譯器來解釋語言中的句子。interpreter模式提供了這樣乙個實現直譯器的框架。interp...