行爲型模式概述
- 行爲模式涉及到算法和對象間職責的分配。行爲模式不僅描述對象或類的模式,還描述它們之間的通信模式。這些模式刻劃了在運行時難以跟蹤的複雜的控制流。它們將你的注意 力從控制流轉移到對象間的聯繫方式上來
- 行爲類模式使用繼承機制在類間分派行爲。其中包括兩個這樣的模式:
- 其中TemplateMethod較爲簡單和常用。模板方法是一個算法的抽象定義,它逐步地定義該算法, 每一步調用一個抽象操作或一個原語操作,子類定義抽象操作以具體實現該算法
- 另一種行爲類模式是Interpreter。它將一個文法表示爲一個類層次,並實現一個解釋器作爲這些類的實例上的一個操作
- 行爲對象模式使用對象複合而不是繼承。一些行爲對象模式描述了一組對等的對象怎樣 相互協作以完成其中任一個對象都無法單獨完成的任務。這裏一個重要的問題是對等的對象 如何互相瞭解對方。對等對象可以保持顯式的對對方的引用,但那會增加它們的耦合度。在 極端情況下,每一個對象都要了解所有其他的對象。 Mediator在對等對象間引入一個mediator對象以避免這種情況的出現。mediator提供了鬆耦合所需的間接性
- Chain of Responsibility提供更鬆的耦合。它讓你通過一條候選對象鏈隱式的向一個對 象發送請求。根據運行時刻情況任一候選者都可以響應相應的請求。候選者的數目是任意的, 你可以在運行時刻決定哪些候選者參與到鏈中
- Observer模式定義並保持對象間的依賴關係。典型的Observer的例子是Smalltalk中的模型/視圖/控制器,其中一旦模型的狀態發生變化,模型的所有視圖都會得到通知
- 其他的行爲對象模式常將行爲封裝在一個對象中並將請求指派給它:
- Strategy模式將 算法封裝在對象中,這樣可以方便地指定和改變一個對象所使用的算法
- Command模式 將請求封裝在對象中,這樣它就可作爲參數來傳遞,也可以被存儲在歷史列表裏,或者以其 他方式使用
- State模式封裝一個對象的狀態,使得當這個對象的狀態對象變化時,該對象可改變它的行爲
- Visitor封裝分佈於多個類之間的行爲
- 而Iterator則抽象了訪問 和遍歷一個集合中的對象的方式
- 行爲型模式有:
- Chain of Responsibility(職責鏈)——對象行爲型模式:https://blog.csdn.net/qq_41453285/article/details/106201661
- Command(命令)——對象行爲型模式:https://blog.csdn.net/qq_41453285/article/details/106242934
- Interpreter(解釋器)——類行爲型模式:https://blog.csdn.net/qq_41453285/article/details/106242960
- Iterator(迭代器)——對象行爲型模式:本文介紹
- Mediator(中介者)——對象行爲型模式:https://blog.csdn.net/qq_41453285/article/details/106242982
- Memento(備忘錄)——對象行爲型模式:https://blog.csdn.net/qq_41453285/article/details/106242996
- Observer(觀察者)——對象行爲型模式:https://blog.csdn.net/qq_41453285/article/details/106201675
- State(狀態)——對象行爲型模式:https://blog.csdn.net/qq_41453285/article/details/106243009
- Strategy(策略)——對象行爲型模式:https://blog.csdn.net/qq_41453285/article/details/106243021
- Template Method(模板方法)——類行爲型模式:https://blog.csdn.net/qq_41453285/article/details/106243031
- Visitor(訪問者)——對象行爲型模式:https://blog.csdn.net/qq_41453285/article/details/106243048
一、意圖
- 提供一種方法順序訪問一個聚合對象中各個元素 , 而又不需暴露該對象的內部表示。
二、別名
- 遊標(Cursor)
三、動機
- 一個聚合對象, 如列表(list), 應該提供一種方法來讓別人可以訪問它的元素,而又不需暴 露它的內部結構. 此外,針對不同的需要,可能要以不同的方式遍歷這個列表。但是即使可以 預見到所需的那些遍歷操作,你可能也不希望列表的接口中充斥着各種不同遍歷的操作。有 時還可能需要在同一個表列上同時進行多個遍歷。
- 迭代器模式都可幫你解決所有這些問題。這一模式的關鍵思想是將對列表的訪問和遍歷 從列表對象中分離出來並放入一個迭代器(iterator)對象中。迭代器類定義了一個訪問該列 表元素的接口。迭代器對象負責跟蹤當前的元素 ; 即, 它知道哪些元素已經遍歷過了
四、適用性
- 迭代器模式可用來:
- 訪問一個聚合對象的內容而無需暴露它的內部表示
- 支持對聚合對象的多種遍歷
- 爲遍歷不同的聚合結構提供一個統一的接口 (即,支持多態迭代)
五、結構
六、參與者
- Iterator(迭代器):迭代器定義訪問和遍歷元素的接口
- ConcreteIterator(具體迭代器):
- 具體迭代器實現迭代器接口
- 對該聚合遍歷時跟蹤當前位置
- Aggregate(聚合):聚合定義創建相應迭代器對象的接口
- ConcreteAggregate(具體聚合):具體聚合實現創建相應迭代器的接口,該操作返回ConcreteIterator的一個適當的實例
七、協作
- ConcreteIterator跟蹤聚合中的當前對象,並能夠計算出待遍歷的後繼對象
八、效果
- 待續(學習到的時候再回來補)
九、實現
- 待續(學習到的時候再回來補)
十、代碼示例
- 待續(學習到的時候再回來補)
十一、相關模式
- Composite:迭代器常被應用到象複合這樣的遞歸結構上
- Factory Method:多態迭代器靠Factory Method來例化適當的迭代器子類
- Memento:常與迭代器模式一起使用。迭代器可使用一個memento來捕獲一個迭代的 狀態。迭代器在其內部存儲memento