SlideShare a Scribd company logo
Composite and Iterator
Design Patterns
2014/06/05
vicall@Qlync Inc.
Composite
⺫⽬目的
將物件組織成樹狀結構,『部分-全體』層級關係,讓外
界以⼀一致性的⽅方式對待個別物件和整體物件。
動機
⽅方便處理『基本物件』及『複合物件』。
時機
想表達出『部分-全體』的物件關係時。
想讓客⼾戶碼⽏毋需考慮基本物件與複合物件之間的差異,能
以⼀一致的⽅方式處理複合結構裡的物件時。
Composite - 結構
!
Composite - 結構
!
• 宣告複合體內含物件之介⾯面。
• 替所有類別所共有的操作時做出合適的預設⾏行為。
• 宣告存取及管理⼦子節點的介⾯面。
• (選配)宣告存取⽗父節點的介⾯面;如果適當,也⼀一併實作之。
Composite - 結構
!
代表複合結構之終端物件。Leaf不會有⼦子節點。
定義基本物件的⾏行為。
Composite - 結構
!
定義含⼦子結構的節點之⾏行為。
儲存⼦子節點。
實作出Component之中與⼦子結構有關的介⾯面。
Composite - 結構
!
透過Component介⾯面操縱複合體的物件。
Composite - 參與者
Component
宣告複合體內含物件之介⾯面。
替所有類別所共有的操作時做出合適的預設⾏行為。
宣告存取及管理⼦子節點的介⾯面。
(選配)宣告存取⽗父節點的介⾯面;如果適當,也⼀一併實作之。
Leaf
代表複合結構之終端物件。Leaf不會有⼦子節點。
定義基本物件的⾏行為。
Composite
定義含⼦子結構的節點之⾏行為。
儲存⼦子節點。
實作出Component之中與⼦子結構有關的介⾯面。
Client
透過Component介⾯面操縱複合體的物件。
Composite - 效果(優缺點)
1. 定義包含基本物件和複合物件的類別階層
2. 簡化客⼾戶碼
3. 更容易添加新的Component類型(不需修改
Client)
4. 讓設計過於⼀一般化(Component型別限制)
Composite - 實作要點
1. ⽗父節點的reference。
⽅方便複合結構巡訪及管理
Maintenance in Add() and Remove()
2. 共⽤用Component。
節省空間
⼦子節點記錄多個⽗父節點
3. 極⼤大化Component介⾯面。
不讓Client確知所⾯面對的是Leaf or Composite
Component 涵蓋Leaf and Composite所有的操作
Composite - 實作要點
4. 宣告管理⼦子節點的操作。
安全性(safety) - Add()/Remove()只宣告於Composite
通透性(transparency) - Add()/Remove()同時宣告於Leaf
5. ⼦子節點的相對順序。
6. 以快取機制增進效率。
Composite - 物件結構
Iterator - 物件⾏行為
Iterator
⺫⽬目的
⽏毋需知曉聚合物件的內部細節,即可依序存取內含的每⼀一
個元素。
動機
⽅方便存取聚合物件
時機
即使對聚合物件內部結構⼀一無所知,仍可存取物件內容。
想以多種⽅方式巡訪聚合物件。
想以⼀一致介⾯面巡訪各種不同的聚合結構時(多型巡訪)。
Iterator - 結構
Iterator - 效果
1. 可提供多種巡訪⽅方式。
中序 iterator or 前序 iterator
2. Iterator可簡化Aggregate介⾯面。
Aggregate不必依照不同巡訪⽅方式做修改
3. 針對同⼀一聚合體,可以同時存在許多巡訪者駐⾜足其中。
Iterator物件會記載⾃自⼰己的巡訪狀態
Iterator - 實作要點
1. 誰來控制巡訪過程?
外部Iterator (Client -> Next())
內部Iterator (Ruby: array.each { |n| print n.to_s + " " } )
2. 誰來定義巡訪演算法?
Aggregate定義(cursor)
Iterator定義(若存取aggregate私有變數,可能違反封裝原則)
3. Iterator有多穩健(robust)?
Aggregate增減元素是否會影響巡訪過程?
4. 其他額外的Iterator操作。
Previous() - 倒退⼀一步
SkipTo() - 跳到滿⾜足某條件的元素位置
Iterator - 實作要點
5. 使⽤用C++的多型Iterator。
<ADD REFERENCE>
6. Iterator可以有存取特權。
存取Aggregate私有變數
Iterator特權存取動作置於protected區
7. 為Composite⽽而設的Iterator。
內部Iterator遞迴呼叫
前序/中序/後序/深度/廣度優先
8. Null Iterator。
⽅方便處理邊界條件
<ADD EXAMPLE>
Design Pattern - Iterator and Composite Patterns

More Related Content

Viewers also liked

Mediator Design Pattern
Mediator Design PatternMediator Design Pattern
Mediator Design Pattern
Kuyseng Chhoeun
 
Mediator pattern
Mediator patternMediator pattern
Mediator pattern
Shakil Ahmed
 
Chain of responsibility
Chain of responsibilityChain of responsibility
Chain of responsibility
Shakil Ahmed
 
Memento pattern
Memento patternMemento pattern
Memento pattern
Woo Jin Kim
 
Observer Pattern
Observer PatternObserver Pattern
Observer Pattern
Akshat Vig
 
Chain of Responsibility Pattern
Chain of Responsibility PatternChain of Responsibility Pattern
Chain of Responsibility Pattern
Hüseyin Ergin
 
Observer pattern
Observer patternObserver pattern
Observer pattern
Samreen Farooq
 
Observer design pattern
Observer design patternObserver design pattern
Observer design patternSara Torkey
 
Structural Design pattern - Adapter
Structural Design pattern - AdapterStructural Design pattern - Adapter
Structural Design pattern - AdapterManoj Kumar
 
Memento
MementoMemento
Interpreter
InterpreterInterpreter
Interpreter
IGZ Software house
 
Adapter Design Pattern
Adapter Design PatternAdapter Design Pattern
Adapter Design Pattern
guy_davis
 
Compiler vs Interpreter-Compiler design ppt.
Compiler vs Interpreter-Compiler design ppt.Compiler vs Interpreter-Compiler design ppt.
Compiler vs Interpreter-Compiler design ppt.
Md Hossen
 
Mediator
MediatorMediator
Mediator
Iryney Baran
 

Viewers also liked (14)

Mediator Design Pattern
Mediator Design PatternMediator Design Pattern
Mediator Design Pattern
 
Mediator pattern
Mediator patternMediator pattern
Mediator pattern
 
Chain of responsibility
Chain of responsibilityChain of responsibility
Chain of responsibility
 
Memento pattern
Memento patternMemento pattern
Memento pattern
 
Observer Pattern
Observer PatternObserver Pattern
Observer Pattern
 
Chain of Responsibility Pattern
Chain of Responsibility PatternChain of Responsibility Pattern
Chain of Responsibility Pattern
 
Observer pattern
Observer patternObserver pattern
Observer pattern
 
Observer design pattern
Observer design patternObserver design pattern
Observer design pattern
 
Structural Design pattern - Adapter
Structural Design pattern - AdapterStructural Design pattern - Adapter
Structural Design pattern - Adapter
 
Memento
MementoMemento
Memento
 
Interpreter
InterpreterInterpreter
Interpreter
 
Adapter Design Pattern
Adapter Design PatternAdapter Design Pattern
Adapter Design Pattern
 
Compiler vs Interpreter-Compiler design ppt.
Compiler vs Interpreter-Compiler design ppt.Compiler vs Interpreter-Compiler design ppt.
Compiler vs Interpreter-Compiler design ppt.
 
Mediator
MediatorMediator
Mediator
 

More from Li-Wei Yao

SSL Certificate and Code Signing
SSL Certificate and Code SigningSSL Certificate and Code Signing
SSL Certificate and Code Signing
Li-Wei Yao
 
From NAT to NAT Traversal
From NAT to NAT TraversalFrom NAT to NAT Traversal
From NAT to NAT Traversal
Li-Wei Yao
 
Docker Usage
Docker UsageDocker Usage
Docker Usage
Li-Wei Yao
 
6.2 Move Creation Knowledge to Factory - Refactoring to Patterns
6.2 Move Creation Knowledge to Factory - Refactoring to Patterns6.2 Move Creation Knowledge to Factory - Refactoring to Patterns
6.2 Move Creation Knowledge to Factory - Refactoring to Patterns
Li-Wei Yao
 
6.3 Encapsulate Classes with Factory - Refactoring to Patterns
6.3 Encapsulate Classes with Factory - Refactoring to Patterns6.3 Encapsulate Classes with Factory - Refactoring to Patterns
6.3 Encapsulate Classes with Factory - Refactoring to Patterns
Li-Wei Yao
 
6.1 Replace Constructors with Creation Methods - Refactoring to Patterns
6.1 Replace Constructors with Creation Methods - Refactoring to Patterns6.1 Replace Constructors with Creation Methods - Refactoring to Patterns
6.1 Replace Constructors with Creation Methods - Refactoring to Patterns
Li-Wei Yao
 
Qlync RD 第三屆讀書會候選清單
Qlync RD 第三屆讀書會候選清單Qlync RD 第三屆讀書會候選清單
Qlync RD 第三屆讀書會候選清單
Li-Wei Yao
 
自動測試 - 測試對象的識別/封裝
自動測試 - 測試對象的識別/封裝自動測試 - 測試對象的識別/封裝
自動測試 - 測試對象的識別/封裝Li-Wei Yao
 
Design Pattern - Factory Pattern
Design Pattern - Factory PatternDesign Pattern - Factory Pattern
Design Pattern - Factory PatternLi-Wei Yao
 

More from Li-Wei Yao (9)

SSL Certificate and Code Signing
SSL Certificate and Code SigningSSL Certificate and Code Signing
SSL Certificate and Code Signing
 
From NAT to NAT Traversal
From NAT to NAT TraversalFrom NAT to NAT Traversal
From NAT to NAT Traversal
 
Docker Usage
Docker UsageDocker Usage
Docker Usage
 
6.2 Move Creation Knowledge to Factory - Refactoring to Patterns
6.2 Move Creation Knowledge to Factory - Refactoring to Patterns6.2 Move Creation Knowledge to Factory - Refactoring to Patterns
6.2 Move Creation Knowledge to Factory - Refactoring to Patterns
 
6.3 Encapsulate Classes with Factory - Refactoring to Patterns
6.3 Encapsulate Classes with Factory - Refactoring to Patterns6.3 Encapsulate Classes with Factory - Refactoring to Patterns
6.3 Encapsulate Classes with Factory - Refactoring to Patterns
 
6.1 Replace Constructors with Creation Methods - Refactoring to Patterns
6.1 Replace Constructors with Creation Methods - Refactoring to Patterns6.1 Replace Constructors with Creation Methods - Refactoring to Patterns
6.1 Replace Constructors with Creation Methods - Refactoring to Patterns
 
Qlync RD 第三屆讀書會候選清單
Qlync RD 第三屆讀書會候選清單Qlync RD 第三屆讀書會候選清單
Qlync RD 第三屆讀書會候選清單
 
自動測試 - 測試對象的識別/封裝
自動測試 - 測試對象的識別/封裝自動測試 - 測試對象的識別/封裝
自動測試 - 測試對象的識別/封裝
 
Design Pattern - Factory Pattern
Design Pattern - Factory PatternDesign Pattern - Factory Pattern
Design Pattern - Factory Pattern
 

Design Pattern - Iterator and Composite Patterns