【寒江雪】Go实现组合模式

Composite Pattern

  组合模式是以树形结构来组织组件完成某个功能。当根节点的某个方法被调用时,会遍历树结构,调用相应的方法。不过具体如何设计是因人而异的。

   它突出的是整体和部分的关系。

实现

  组合模式的结构中有两种类型,一种是分支节点,它包含了子节点列表,可以往里边添加和删除节点。另一种是叶子节点,叶子节点没有子节点。这两种节点都实现了同一个接口:Component。这个接口只包含了一个方法。(根据实际情况调整)

  分支节点还要实现自己的Add,GetChild,Remove方法。

package bridge

type ICoding interface {
    WriteName(string) ICoding
    WriteCmd(string) ICoding
    Compile() AbstractProgram
}

type CodeUtil struct {
    code AbstractProgram
}

func (this CodeUtil) WriteName(name string) ICoding {
    this.code.Name = name
    return this
}

func (this CodeUtil) WriteCmd(cmd string) ICoding {
    this.code.Cmd = cmd
    return this
}

func (this CodeUtil) Compile() AbstractProgram {
    res := AbstractProgram{Name: this.code.Name, Cmd: this.code.Cmd}
    return res
}

func (this CodeUtil) GetSingProgram(word string) Sing {
    res := Sing{}
    res.AbstractProgram = this.WriteName("sing").WriteCmd("sing").Compile()
    res.Word = word
    return res
}

func (this CodeUtil) GetDogProgram() Dog {
    res := Dog{}
    res.AbstractProgram = this.WriteName("dog").WriteCmd("dog").Compile()
    return res
}


使用

  我这里就实现简单的使用方式吧。

package main

import (
    "projects/DesignPatternsByGo/structuralPatterns/composite"
    "fmt"
)

func main(){
    root := composite.NewComponent(func() {
        fmt.Println("My name is:"+"root")
    },true).(*composite.Composite)
    root.Add(composite.NewComponent(func() {
        fmt.Println("I'm Leaf.")
    },false).(composite.Component))
    composite_2 := composite.NewComponent(func() {
        fmt.Println("I'm Composite2.")
    },true).(*composite.Composite)

    composite_2.Add(composite.NewComponent(func() {
        fmt.Println("I'm Leaf2.")
    },false).(composite.Component))
    composite_2.Add(composite.NewComponent(func() {
        fmt.Println("I'm Leaf3.")
    },false).(composite.Component))

    c2 := root.Add(composite_2)

    root.Operation()
    root.Remove(c2)
    root.Operation()
}



Author:寒江雪
Date:2018 03 12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值