23種設計模式C 原始碼與UML實現 迭代器模式

2021-10-10 23:51:14 字數 2206 閱讀 4390

迭代器模式

iterator模式也叫迭代模式,是行為模式之一,他把對容器種包含的內部物件的訪問委讓給外部類,使用iterator按順序進行遍歷訪問的設計模式。

在使用iterator模式之前,首先應該明白iterator模式是用來解決什麼問題的。或者說如果不使用iterator模式會存在什麼問題。

由容器自己實現順序遍歷。直接在容器類裡新增順序遍歷方法

讓呼叫者自己實現遍歷,直接暴露資料細節給外部

以上實現方法存在的問題:

方法1,容器承擔了太多的功能,一方面需要提供新增刪除等本身應有的功能,一方面還需要提供遍歷訪問功能。

方法2,旺旺容器實現遍歷的過程中,需要儲存遍歷的狀態,當跟元素的新增刪除等功能夾雜在一起很容易引起混亂和程式執行錯誤等。

iterator模式就是為了有效地處理按順序進行遍歷訪問的一種設計模式,簡單地說 ,iterator模式提供一種有效的方法,可以遮蔽聚集物件集合的容器類的實現細節,而能對容器內包含的物件元素按順序進行有效的遍歷訪問。所以,iterator模式的應用場景可以歸納為滿足以下幾個條件:

iterator(迭代器介面):

該介面必須定義實現迭代功能的最小定義方法集,比如提供hasnext()和next()方法。

concreteiterator(迭代器實現類):

迭代器介面iterator的實現類。可以根據具體情況加以實現。

aggregate(容器介面):

定義基本功能以及提供類似 iterator iterator()的方法。

concreteaggregate(容器實現類):

容器介面的實現類。必須實現iteratoriterator()方法。

說明:在迭代器中 持有 乙個集合的 引用;所以通過迭代器,就可以訪問集合

//

// 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...