设计模式--组合(Component)模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式--组合(Component)模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
模式定義
將對象組合成樹形結構以表示“部分–整體”的層次結構,Composite使得用戶對單個對象和組合對象的使用具有一致性(穩定)
類圖
要點總結
- Composite模式采用樹形結構來實現普遍存在的對象容器,從而將“一對多”的關系轉化為“一對一”的關系,使得客戶代碼可以一致地(復用)處理對象和對象容器,無需關系處理的是單個的對象,還是組合的對象容器
- 將“客戶代碼與復雜的對象容器結構”解耦是Composite的核心思想解耦之后,客戶代碼將于純粹的抽象接口–而給對象容器的內部實現結構–發生依賴,從而更能“應對變化”
- Composite模式在具體實現中,可以讓父對象中的子對象反向追溯,如果父對象有頻繁的遍歷需求,可使用緩存技巧來改善效率
Go語言代碼實現
工程目錄
composite.go
package Compositeimport "fmt"type Component interface {Traverse() }type Leaf struct {value int }func NewLeaf (value int) *Leaf{return &Leaf{value: value} }func (l *Leaf) Traverse() {fmt.Println(l.value) }type Composite struct {children []Component }func NewComposite() * Composite{return &Composite{children: make([]Component, 0)} } func (c *Composite) Add (component Component) {c.children = append(c.children, component) }func (c *Composite) Traverse() {for idx, _ := range c.children{c.children[idx].Traverse()} }composite_test.go
package Compositeimport ("fmt""testing" )func TestComposite_Traverse(t *testing.T) {containers := make([]Composite, 4)for i := 0; i< 4; i++ {for j := 0; j < 3 ; j++ {containers[i].Add(NewLeaf(i * 3 + j))}}for i := 0; i < 4; i++ {containers[0].Add(&containers[i])}for i := 0; i < 4; i++{containers[i].Traverse()fmt.Printf("Finished\n")} }總結
以上是生活随笔為你收集整理的设计模式--组合(Component)模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--备忘录(Memento)模式
- 下一篇: 设计模式--迭代器(Iterator)模