目的
(將物件組織成樹狀結構、「部分-全體」層級關係,讓外界以一致性的方式對待個別物件和整體物件。[1])在電腦中最常看到的樹狀結構就是檔案系統中的檔案與資料夾,資料夾像是檔案,可以執行、重新命名、排列⋯⋯。然而資料夾裡面卻可以還有許多檔案或者資料夾,執行資料夾則是打開資料夾。對於檔案系統而言,我們希望可以一致性對待資料夾和檔案,讓程式碼相對簡潔。
Composite design pattern 便是對於這種樹狀結構一個好的解法。Composite design pattern 可以:
- 遞回複合(Recursive composition):例如資料夾裡面可以有許多資料夾。
- 讓一對多的擁有關係(has a)變成繼承關係(is a),大大簡化程式複雜度。
- 因為是繼承關係,可以一致性對待單一物件或者是複合物件。
範例程式:
範例程式與 Class Diagram 的對應關係:
- Client <==> main
- Component <==> Item
- Leaf <==> OpenFileItem, NewFileItem, FileItem
- Composite <==> Menu, OpenRecentFilesMenu
[1] "物件導向設計模式", Gamma, Johnson, Helm, Vlissides 著, 葉秉哲譯
[2] "Composite Design Pattern", http://sourcemaking.com/design_patterns/composite
沒有留言:
張貼留言