建造模式,也有翻译成生成器模式的,大家看到后知道他们是一个东西,都是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
构造函数要好一点呢?
参考链接
https://coolshell.cn/articles/21146.html
给网管个星标,第一时间吸我的知识 👆
喜欢网管的文章内容和写作风格,记得把我安利给更多人。光看公众号不过瘾?可以加我的个人微信(微信号:fsg1233110)
觉得有用就点个在看 👇👇👇