Aha!設計模式 86 迭代器模式 2)

2021-09-24 03:22:39 字數 881 閱讀 2871

適用性

為訪問不同構成的聚合物件提供統一的方法。

支援以統一的方法實現不同形式的遍歷。

歸納成一句話,就是使用迭代器模式可以以一種方式對不同構成的物件實現不同種類的遍歷。

結構

參與者

• iterator(抽象迭代器類)

— 抽象迭代器定義取得和遍歷元素所需要的介面。類圖中定義的介面只是乙個示例。在實際的應用中,也可以有其他選擇。例如可以讓next方法除了移動當前位置之外還可以返回子元素,這樣就可以省去isdone介面。

• concreteiterator(具象迭代器類)

— 具象迭代器實現迭代器介面。在具體實現迭代器介面的時候,可能需要直接訪問聚合類的資料,也可能是通過其他訪問該聚合類的迭代器間接訪問聚合類物件。

• aggregate(聚合類)

— 聚合定義建立相應迭代器物件的介面。這個介面的用法,相當於工廠方法模式。也就是說這個聚合類還應該具有其他的功能。

• concreteaggregate(具象聚合類)

— 具象聚合類實現建立相應迭代器的介面,該操作返回concreteiterator的具體例項。

很多時候,抽象聚合類和具象聚合類之間會產生這種繼承關係,並不是因為需要這種生成迭代器動作的抽象,而是由於這兩個類本身的功能需求。生成迭代器只是軟體開發上的需求,並不是類的本質特徵。也有很多情況根本就不需要這種繼承關係。

協作

• concreteiterator取得聚合中的當前子元素,並能夠找到出待遍歷的後繼物件。

Aha!設計模式 88 迭代器模式 4)

例項 由於迭代器已經是很多語言的標準裝備,所以在實際的開發中,首先應該考慮語言中提供的迭代器,在功能不能滿足需求時,根據語言定義的迭代器介面定義自己的瀏覽器。接下來我們通過python語言的例子,說明幾個迭代器模式的應用。python語言中已經事先定義了多種容器,例如列表和字典等。這些容器都提供了乙...

Aha!設計模式 58 裝飾模式 2

示例 我們從前一篇文章中選取網路資料處理的例子寫一段python 中首先定義了資料處理基類dataprocessor,它有乙個process操作用於處理資料。datacreater是乙個普通的派生類,用於初始化資料。然後是decorator類,它定義了乙個資料成員processor,用於管理裝飾物件...

Aha!設計模式 65 享元模式 2

適用性 以下的情況下可以適用享元模式。應用程式中大量存在相同或相似狀態的物件時。由於應用程式功能方面的需求,需要在不同物件之間共享資料或物件時。結構 參與者 flyweight translator 定義享元的介面,一般來講介面的引數是無法共通的部分。相對於享元儲存的資料來講,稱為外部資料。conc...