Go 设计模式之建造者模式

smallBird · 2021-09-07 20:31:10 · 1869 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2021-09-07 20:31:10 的主题,其中的信息可能已经有所发展或是发生改变。

直接上代码。 不解释了。菜鸟中。 大牛可多多指正

package main

import "fmt"

func main() {
    a := &LinkmgrImplBuilder{}
    b,err := a.
        SetSender("1").
        SetOm(2).
        SetDrInfo(1,2,3).
        Build()
    if err != nil {
        return
    }
    b.Test()
}

type drinfo struct {
    dr1 int32
    dr2 int32
    dr3 int32
}

type LinkMgr interface {
    Test()
}

type linkmgrImpl struct {
    drinfo
    om     int32
    sender string
    dbp    string
}

func (l *linkmgrImpl) Test() {
    fmt.Println("建造成功")
    fmt.Println(l.dr3)
    fmt.Println(l.om)
}

type LinkmgrImplBuilder struct {
    lIl linkmgrImpl
}

func (l *LinkmgrImplBuilder) Build() (LinkMgr,error) {
    return newLinkMgr(l)
}
func (l *LinkmgrImplBuilder) SetOm(dr1 int32) *LinkmgrImplBuilder {
    l.lIl.om = dr1
    return l
}

func (l *LinkmgrImplBuilder) SetSender(dr1 string) *LinkmgrImplBuilder {
    l.lIl.sender = dr1
    return l
}

func (l *LinkmgrImplBuilder) SetDrInfo(dr1, dr2, dr3 int32) *LinkmgrImplBuilder {
    l.lIl.dr1 = dr1
    l.lIl.dr2 = dr2
    l.lIl.dr3 = dr3
    return l
}

func newLinkMgr(lBuilder *LinkmgrImplBuilder) (LinkMgr,error) {
    if lBuilder.lIl.om == 0 {
        return nil,NewErr("cuowu")
    }
    l := &linkmgrImpl{
        drinfo: lBuilder.lIl.drinfo,
        om:     lBuilder.lIl.om,
        sender: lBuilder.lIl.sender,
        dbp:    lBuilder.lIl.dbp,
    }
    return l,nil
}

type myerr struct {
    info string
}

func (e *myerr)Error()string{
    return e.info
}

func NewErr(errinfo string)*myerr{
    return &myerr{
        info:errinfo,
    }
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1869 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传