日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

设计模式--组合(Component)模式

發布時間:2025/3/21 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式--组合(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)模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。