一、结点类
package com.study.composite
interface INode {
fun print()
}
package com.study.composite
class BranchNode(private val nodeName: String, private val depth: Int) : INode {
val childNodes = arrayListOf<INode>()
fun addChildNode(node: INode) {
childNodes.add(node)
}
override fun print() {
for (i in 0..depth) print("-")
println("树:$nodeName::$depth")
}
}
package com.study.composite
class LeafNode(val nodeName: String, val depth: Int) : INode {
override fun print() {
for (i in 0..depth) print("-")
println("叶:$nodeName::$depth")
}
}
二、主程序调用
package com.study.composite
fun main() {
val rootNode = BranchNode("中国", 0)
val branchNode1 = BranchNode("湖北", 1)
val branchNode2 = BranchNode("湖南", 1)
val leafNode11 = LeafNode("武汉", 2)
val leafNode12 = LeafNode("十堰", 2)
val leafNode21 = LeafNode("长沙", 2)
val leafNode22 = LeafNode("吉首", 2)
rootNode.addChildNode(branchNode1)
rootNode.addChildNode(branchNode2)
branchNode1.addChildNode(leafNode11)
branchNode1.addChildNode(leafNode12)
branchNode2.addChildNode(leafNode21)
branchNode2.addChildNode(leafNode22)
printNode(rootNode)
}
fun printNode(node: INode) {
node.print()
if (node is BranchNode) {
for (tempNode in node.childNodes)
printNode(tempNode)
}
}
三、运行结果