go设计模式之组合设计模式

组合设计模式

简介

将对象组合成树形结构以表示"部分-整体"的层次结构。组合设计模式使得用户对单个对象和组合对象的使用具有一致性。

参与者

  • Component

    为组合中的对象声明接口

  • Leaf

    在组合中表示叶子节点对象。

  • Composite

    存储子部件。访问和管理子部件。

案例1

component.go

go 复制代码
package main

type Component interface {
	Execute()
}

leaf.go

go 复制代码
package main

import "fmt"

type Leaf struct {
	name string
}

func (l *Leaf) Execute() {
	fmt.Printf("%s leaf execute\n", l.name)
}

composite.go

go 复制代码
package main

import "fmt"

type Composite struct {
	name       string
	components []Component
}

func (cm *Composite) Execute() {
	fmt.Printf("%s composite execute\n", cm.name)
	for _, c := range cm.components {
		c.Execute()
	}
}

func (cm *Composite) Add(component Component) {
	cm.components = append(cm.components, component)
}

client.go

go 复制代码
package main

func main() {
	composite1 := &Composite{name: "composite1"}
	composite2 := &Composite{name: "composite2"}
	leaf1 := &Leaf{name: "leaf1"}
	leaf2 := &Leaf{name: "leaf2"}
	leaf3 := &Leaf{name: "leaf3"}
	composite2.Add(composite1)
	composite1.Add(leaf1)
	composite2.Add(leaf2)
	composite2.Add(leaf3)
	composite2.Execute()
}
相关推荐
Riemann~~13 分钟前
ros2写一个可以修改参数的node
开发语言·python·ros2·机器人系统
无巧不成书021813 分钟前
Java核心技术全景解析:从白皮书到实战踩坑
java·开发语言
Roy_Sashulin15 分钟前
基于AI的Java编程平台
java·开发语言·人工智能·sashulin·deepseek
周万宁.FoBJ19 分钟前
vue源码讲解之 reactive解析(仅proxy部分)
开发语言·javascript·ecmascript
阿贵---24 分钟前
单元测试在C++项目中的实践
开发语言·c++·算法
2401_8914821730 分钟前
C++中的事件驱动编程
开发语言·c++·算法
吐个泡泡v32 分钟前
Python 开发“设计模式”指南
python·设计模式
sw12138934 分钟前
C++与Rust交互编程
开发语言·c++·算法
2401_8579182938 分钟前
模板编译期机器学习
开发语言·c++·算法
weixin_4041576839 分钟前
Java高级面试与工程实践问题集(一)
java·开发语言·面试