日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發(fā)布時間:2025/3/21 asp.net 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式--组合(Component)模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模式定義

將對象組合成樹形結(jié)構(gòu)以表示“部分–整體”的層次結(jié)構(gòu),Composite使得用戶對單個對象和組合對象的使用具有一致性(穩(wěn)定)

類圖

要點總結(jié)

  • Composite模式采用樹形結(jié)構(gòu)來實現(xiàn)普遍存在的對象容器,從而將“一對多”的關(guān)系轉(zhuǎn)化為“一對一”的關(guān)系,使得客戶代碼可以一致地(復(fù)用)處理對象和對象容器,無需關(guān)系處理的是單個的對象,還是組合的對象容器
  • 將“客戶代碼與復(fù)雜的對象容器結(jié)構(gòu)”解耦是Composite的核心思想解耦之后,客戶代碼將于純粹的抽象接口–而給對象容器的內(nèi)部實現(xiàn)結(jié)構(gòu)–發(fā)生依賴,從而更能“應(yīng)對變化”
  • Composite模式在具體實現(xiàn)中,可以讓父對象中的子對象反向追溯,如果父對象有頻繁的遍歷需求,可使用緩存技巧來改善效率

Go語言代碼實現(xiàn)

工程目錄

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")} }

總結(jié)

以上是生活随笔為你收集整理的设计模式--组合(Component)模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。