Golang设计模式——17组合模式

简介: Golang设计模式——17组合模式

组合模式

定义

组合多个对象形成树形结构以表示“整体-部分”的关系的层次结构。组合模式对叶子节点和容器节点的处理具有一致性,又称为整体-部分模式。

优点

  1. 组合模式在解决有层级关系时,有着得天独厚的优势。思路清晰、代码优雅。
  2. 组合模式可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次,它让客户端忽略了层次的差异,方便对整个层次结构进行控制。
  3. 在组合模式中增加新的容器构件和叶子构件都很方便,无须对现有类库进行任何修改,符合“开闭原则”。

缺点

  1. 使得设计更加复杂,客户端需要花更多时间理清类之间的层次关系。
  2. 在增加新构件时很难对容器中的构件类型进行限制。

场景

  1. 在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,客户端可以一致地对待它们。

代码

package Composite
import "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()
  }
}
package Composite
import (
  "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 := 1; i < 4; i++ {
    containers[0].Add(&containers[i])
  }
  containers[0].Traverse()
}

其他设计模式

设计模式Git源代码

00简单工厂模式

01工厂方法模式

02抽象工厂模式

03外观模式

04建造者模式

05桥接模式

06命令模式

07迭代器模式

08模板模式

09访问者模式

10备忘录模式

11责任链模式

12中介模式

13原型模式

14状态模式

15策略模式

16享元模式

17组合模式

18解释器模式

19单例模式

20适配器模式

21代理模式

22装饰器模式

23观察者模式


目录
相关文章
|
2月前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 组合模式
js设计模式【详解】—— 组合模式
39 7
|
3天前
|
设计模式 Java
Java设计模式:组合模式的介绍及代码演示
组合模式是一种结构型设计模式,用于将多个对象组织成树形结构,并统一处理所有对象。例如,统计公司总人数时,可先统计各部门人数再求和。该模式包括一个通用接口、表示节点的类及其实现类。通过树形结构和节点的通用方法,组合模式使程序更易扩展和维护。
Java设计模式:组合模式的介绍及代码演示
|
3月前
|
设计模式 存储 安全
Java设计模式:组合模式之透明与安全的两种实现(七)
Java设计模式:组合模式之透明与安全的两种实现(七)
|
3月前
|
设计模式 Java
Java设计模式之组合模式详解
Java设计模式之组合模式详解
|
3月前
|
设计模式
组合模式-大话设计模式
组合模式-大话设计模式
|
4月前
|
设计模式 Java 容器
【设计模式系列笔记】组合模式
组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树状结构以表示部分-整体的层次结构。组合模式使得客户端可以统一处理单个对象和对象组合,而无需区分它们的类型。
74 12
|
4月前
|
设计模式 Go
[设计模式 Go实现] 结构型~组合模式
[设计模式 Go实现] 结构型~组合模式
|
4月前
|
设计模式 安全 Java
[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式
[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式
|
4月前
|
设计模式 Java
【设计模式】文件目录管理是组合模式吗?
【设计模式】文件目录管理是组合模式吗?
27 0
|
4月前
|
设计模式 存储 Java
23种设计模式,组合模式的概念优缺点以及JAVA代码举例
【4月更文挑战第5天】组合模式(Composite Pattern)是一种结构型设计模式,旨在通过将对象组合成树形结构以表示部分-整体的层次结构,使用户对单个对象和组合对象的使用具有一致性。这种模式让客户可以统一地处理单个对象和组合对象
68 6