组合模式主要用于树状结构对象的统一处理。也只有对于树状结构,该模式才有使用价值。
对于树状结构,比如存在“根”、“枝”、“叶”。它们可以继承自同一个基类:
Define Class temp As Custom
Procedure Add(toObject As temp)
EndProc
Procedure DoSomething()
EndProc
EndDefine
“根”和“枝”大致可以这样来定义:
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
那么“叶”就是下面的定义
Define Class Leaf As temp
Procedure Add(toObject As temp)
NoDefault
EndProc
Procedure DoSomething()
*!* 一些操作
EndProc
EndDefine
最终,我们可能得到如下的代码:
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高效编程之设计模式)。
未完待续......