設計模式 迭代器模式

2021-08-18 07:58:37 字數 2307 閱讀 2824

提供一種方法順序訪問乙個聚合物件中的各種元素,而又不暴露該物件的內部表示。c#和php自己已經實現了這個模式,例如c#裡邊的foreach方法。當我們要訪問乙個聚集而又不需要知道它內部結構的時候,可以考慮用迭代器模式,迭代器模式遍歷是由它內部提供的方法實現的。

迭代器模式有四個角色:

迭代器:迭代器定義訪問和遍歷元素的介面

具體迭代器:具體迭代器實現迭代器介面,對該聚合遍歷時跟蹤當前位置

聚合:聚合定義建立相應迭代器物件的介面(可選)

具體聚合:具體聚合實現建立相應迭代器的介面,該操作返回concreteiterator的乙個適當的例項(可選)

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

主要解決:不同的方式來遍歷整個整合物件。

何時使用:遍歷乙個聚合物件。

如何解決:把在元素之間遊走的責任交給迭代器,而不是聚合物件。

優點: 1、它支援以不同的方式遍歷乙個聚合物件。 2、迭代器簡化了聚合類。 3、在同乙個聚合上可以有多個遍歷。 4、在迭代器模式中,增加新的聚合類和迭代器類都很方便,無須修改原有**。

缺點:由於迭代器模式將儲存資料和遍歷資料的職責分離,增加新的聚合類需要對應增加新的迭代器類,類的個數成對增加,這在一定程度上增加了系統的複雜性。

使用場景: 1、訪問乙個聚合物件的內容而無須暴露它的內部表示。 2、需要為聚合物件提供多種遍歷方式。 3、為遍歷不同的聚合結構提供乙個統一的介面。

注意事項:迭代器模式就是分離了集合物件的遍歷行為,抽象出乙個迭代器類來負責,這樣既可以做到不暴露集合的內部結構,又可讓外部**透明地訪問集合內部的資料。

由於php自己有iterator這個了,所以本次**只做演示,只可意會,不要使用。先來乙個不用聚合的:

<?php

//抽象迭代器 由於iterator是關鍵字所有用myiterator

abstract class myiterator

//具體的迭代器--不帶聚集的

class concreteiterator extends myiterator

function first()

function next()

else

}function isdone()

function currentitem()

}//呼叫

$testarray = array('a','b','c');

$concreteiterator = new concreteiterator($testarray);

while (!$concreteiterator->isdone())

?>

上邊這個,沒有用到聚集,下邊這段**用到了聚集:

<?php

//抽象迭代器 由於iterator是關鍵字所有用myiterator

abstract class myiterator

//抽象聚合

abstract class aggregate

//具體的迭代器

class concreteiterator extends myiterator

function first()

function next()

else

}function isdone()

function currentitem()

}//具體的聚合

class concreteaggregate extends aggregate

//返回聚集總個數

public function count() }

//測試類

class test

public function getname() }

//呼叫

$testa = new test("dali");

$testb = new test("ergou");

$concreteaggregate = new concreteaggregate();

$concreteaggregate->aggregates = array($testa,$testb);

$concreteiterator = $concreteaggregate->createiterator();

while (!$concreteiterator->isdone())

?>

設計模式 迭代器模式

迭代器模式是屬於物件行為性的模式。首先是定義 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露物件的表示方法。迭代器的結構圖 適用性 1 訪問乙個聚合物件的內容而無需暴露它的內部表示 2 支援聚合物件的多種遍歷 3 為遍歷不同的聚合結構提供乙個統一的介面 支援多型迭代 協作 concretei...

設計模式 迭代器模式

iterator,提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示。迭代器模式就是分離了集合物件的遍歷行為,抽象出乙個迭代器類來負責,這樣既可以做到不暴露集合的內部結構,又可讓外部 透明地訪問集合內部的資料。iterator迭代器抽象類 迭代器抽象類 abstract clas...

設計模式 迭代器模式

迭代器模式在我們日常程式設計中使用非常頻繁,像list map 陣列等都會用到迭代器模式。迭代器模式屬於行為型模式,它用於順序訪問集合物件的元素,不需要知道集合物件的底層表示。在迭代器模式結構圖中包含如下幾個角色 它支援以不同的方式遍歷乙個聚合物件。迭代器簡化了聚合類。在同乙個聚合上可以有多個遍歷。...