首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >设计模式:组合模式(Composite)

设计模式:组合模式(Composite)

作者头像
firstxinjie
发布2025-05-17 15:38:48
发布2025-05-17 15:38:48
10100
代码可运行
举报
文章被收录于专栏:X#(XSharp)X#(XSharp)
运行总次数:0
代码可运行

组合模式主要用于树状结构对象的统一处理。也只有对于树状结构,该模式才有使用价值。

对于树状结构,比如存在“根”、“枝”、“叶”。它们可以继承自同一个基类:

代码语言:javascript
代码运行次数:0
运行
复制
Define Class temp As Custom 
        Procedure Add(toObject As temp)
	EndProc

        Procedure DoSomething()
	EndProc
EndDefine

“根”和“枝”大致可以这样来定义:

代码语言:javascript
代码运行次数:0
运行
复制
Define Class Composite As temp
	Protected oObject
	oObject = .Null.

        Procedure Init()
		This.oObject = CreateObject("Collection")
	EndProc 

        Procedure Add(toObject As temp)
		This.oObject.Add(m.toObject)
	Endproc

        Procedure DoSomething()
               For Each loObject In This.oObject
			m.loObject.DoSomething()
		Endfor
	Endproc
Enddefine

那么“叶”就是下面的定义

代码语言:javascript
代码运行次数:0
运行
复制
Define Class Leaf As temp
        Procedure Add(toObject As temp)
		NoDefault
	EndProc 

        Procedure DoSomething()
            *!* 一些操作
	EndProc
EndDefine

最终,我们可能得到如下的代码:

代码语言:javascript
代码运行次数:0
运行
复制
Local loRoot As Composite, loParentComposite As Composite, loComposite As Composite, loLeaf As Leaf
m.loRoot	= CreateObject("Composite")

m.loParentComposite	= m.loRoot
m.loComposite		= CreateObject("Composite")
m.loComposite.Tag	= "第一层 第一个兄弟 复合节点"
m.loParentComposite.Add(m.loComposite)
m.loLeaf		= CreateObject("Leaf")
m.loLeaf.Tag		= "第一层 第二个兄弟 叶节点"
m.loParentComposite.Add(m.loLeaf)

*!* 依此类推,添加第二层、第三层等等

m.loRoot.DoSomething()

大道至简,设计模式真的很奇妙。如果你还未领悟其中的精髓,请随我来(欢迎留言或私信报名参与下月开始的培训:VFP高效编程之设计模式)。

未完待续......

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 xinjie的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档