一些实用的编程模式 | Builder模式能用来解决什么问题?

建造模式,也有翻译成生成器模式的,大家看到后知道他们是一个东西,都是Builer Pattern翻译过来的就行。它是一种对象构建模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

那么什么情况下适合使用建造模式呢?

  • 当要构建的对象很大并且需要多个步骤时,使用构建器模式,有助于减小构造函数的大小。

如果你是写过Java程序一定对下面这类代码很熟悉。

Coffee.builder().name("Latti").price("30").build()

当然,自己给Coffee类加上构建模式,还是需要写不少额外的代码,不过Java里有一个lombok包,只要引入这个包再在实体类加上@Builder注解,就可以使用建造模式构建对象啦。

import lombok.Builder;

@Builder
public class Coffee extends BaseEntity implements Serializable {
    private String name;

    private Long price;
  
    ......
}

那在Go里面要怎么实现Builder模式呢?仿照上面这个模式,我们可以这样:

package myserver
//使用一个builder类来做包装
type ServerBuilder struct {
  Server
}

func Builder () *ServerBuilder {
  sb := new(ServerBuilder)
  sb.Server.Addr = "127.0.0.1"
  sb.Server.Port = "1001"
  // Server其他成员的默认值
  ......
  return sb
}

func (sb *ServerBuilder) Protocol(protocol string) *ServerBuilder {
  sb.Server.Protocol = protocol 
  return sb
}

func (sb *ServerBuilder) Addr(addr string) *ServerBuilder {
  sb.Server.Addr = addr
  return sb
}

func (sb *ServerBuilder) Port(port string) *ServerBuilder {
  sb.Server.Port = port
  return sb
}

func (sb *ServerBuilder) MaxConn( maxconn int) *ServerBuilder {
  sb.Server.MaxConns = maxconn
  return sb
}

func (sb *ServerBuilder) TimeOut( timeout time.Duration) *ServerBuilder {
  sb.Server.Timeout = timeout
  return sb
}


func (sb *ServerBuilder) Build() (Server) {
  return  sb.Server
}

接下来就可以使用构建模式创造Server类型的对象了

server := myserver.Builder().
 Addr("127.0.0.1").
 Port("11203").
 MaxConn(50).
 Build()

这么一来有没有觉得确实比定义一个参数巨多的Server构造函数要好一点呢?

参考链接

  1. https://coolshell.cn/articles/21146.html

给网管个星标,第一时间吸我的知识 👆

喜欢网管的文章内容和写作风格,记得把我安利给更多人。光看公众号不过瘾?可以加我的个人微信(微信号:fsg1233110)

觉得有用就点个在看  👇👇👇

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值