C 設計模式 迭代模式

2022-06-09 21:36:11 字數 2488 閱讀 7392

一.介紹  

迭代模式(iterator pattern)。屬於行為型模式。它提供一種方法順序訪問聚合物件中各個元素,而又不暴露該物件的內部表示。

二.實現

迭代模式是針對聚合物件使用的,一般使用聚合,有增刪改操作,也需要進行遍歷操作。如果聚合物件全實現這些功能,那根據單一職責原則,聚合物件就承擔了太多責任。迭代模式就是去實現遍歷聚合物件責任的方式,通俗理解,就是建立乙個迭代類,這個包含了整個聚合物件,由這個迭代類記錄當前聚合的當前位置以及去遍歷查詢這個聚合。下面實現的是標準的迭代器模式。

//

抽象迭代器類

public

abstract

class

iterator

//具體迭代器類

public

class

concreteiterator : iterator

public

override

object

currentitem()

throw

newindexoutofrangeexception();

}public

override

object

first()

public

override

bool

isend()

public

override

object

next()

throw

newindexoutofrangeexception();

}}//

抽象聚合類

public

abstract

class

aggregate

//具體聚合類

public

class

concreteaggregate : aggregate

public

override

iterator getiterator()

public

intcount

}public

intthis[int

index]

set }}//

呼叫public

static

void main(string

args)

;

var aggregate = new

concreteaggregate();

int index = 0

;

foreach (var i in

arr)

var iterator =aggregate.getiterator();

console.writeline(iterator.first());

while (!iterator.isend())

}

在c#中,迭代模式的聚合介面和迭代器介面都已經存在,其中ienumerator介面是迭代器角色,ienumberable介面是抽象聚合角色。

public

class person : ienumerable

public ienumeratorgetenumerator()

ienumerator ienumerable.getenumerator()

}public

class personienumerator : ienumerator

public

string

current

}object ienumerator.current =>current;

public

void

dispose()

public

bool

movenext()

public

void

reset()

}//呼叫public

static

void main(string

args)

); console.writeline(

"foreach demo:");

foreach (var p in

person)

console.writeline();

var ienumerator =person.getenumerator();

console.writeline(

"movenext demo:");

while

(ienumerator.movenext())

}

三.總結

優點:1.迭代模式使得訪問乙個聚合物件的內容而不用暴露它的內部表示,即迭代抽象。

2.迭代模式為遍歷不同的聚合結構提供了乙個統一的介面,從而支援了不同聚合結構可以使用同樣的演算法。

缺點:1.迭代模式使得在遍歷時更改聚合物件會出現異常,所以使用foreach語句只能進行遍歷,不能在遍歷時進行修改聚合中元素操作。

C 設計模式 迭代器模式

迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示。迭代器模式結構圖 iterator迭代器抽象類 class iterator public virtual object first 0 virtual object next 0 virtual ...

C 設計模式 迭代器模式

迭代器模式 提供一種方法順序訪問乙個聚合物件中的各個元素,而又不暴露其內部的結構 每一種資料結構 包括自定義 遍歷自身內部的資料方式都是不同的。但是我們又希望和常規的遍歷方式一樣呼叫,就如for和foreach一樣遍歷。想要以相同的方式遍歷不同型別的聚合物件,首先就要有乙個相同的介面方法來統一獲取,...

設計模式 C 迭代器模式

sejimoshi.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include include include using namespace std class student long getid intgetage void setname string name void...