GO组合模式

本文介绍了GO语言中的组合模式,该模式用于构建树形结构来表示部分-整体的关系,使得对单个对象和组合对象的操作具有一致性。通过代码示例展示了如何使用组合模式,并讨论了其优点,如解耦客户代码和复杂对象结构,增强代码复用,以及可能存在的复杂性问题。同时,指出了在遍历层次结构和选择调用父类多态方法以提高代码复用的重要性,并列举了适合使用组合模式的场景,如.NET Winform组件设计。
摘要由CSDN通过智能技术生成

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

简单的理解就是一颗树中有根节点也有叶子节点,对于它们的增删改查,我们都使用名字同样的函数,但是具体的行为却因为注册时不一样而不一样。

看下代码:

package composite

import "fmt"

type Component interface {
	Parent() Component
	SetParent( Component)
	Name() string
	SetName(string)
	AddChild(component Component)
	Print( string)
}

const (
	LeafNode = iota
	CompositeNode
)
//组合模式的简单工厂,可以看成根据参数决定创建目录,或者文件
//返回即可以描述目录又可以描述文件的interface
func NewComponent(kind int, name string) Component {
	var c Component
	switch kind {
	case LeafNode:
		c = NewLeaf()
	case CompositeNode:
		c = NewComposite()
	}

	c.SetName(name)
	return c
}

//这个是共有部分,叶子和根节点都有这个,细节的不同可以重写相关方法函数
type component struct {
	parent Component
	name string
}

func (c *component) Parent() Component {
	return c.parent
}

func (c *component) SetParent(parent Component) {
	c.parent = parent
}

func (c *component
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值