对象构造方法

有以下名为 Server 的类型。

1
2
3
4
type Server struct {
Port int
Protocol string
}
  • 构造器

1
2
3
4
5
6
func NewServer(port int, protocol string) *Server{
return &Server{
Port: port,
Protocol: protocol,
}
}

简单直接,参数少的时候很常用。

  • functional-option

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
type Option func(server *Server)

func WithPort(port int) Option {
return func(server *Server) {
server.Port = port
}
}

func WithProtocol(protocol string) Option {
return func(server *Server) {
server.Protocol = protocol
}
}

func NewServerWithOption(options ...Option) *Server {
server := &Server{}
for _, option := range options {
option(server)
}
return server
}

直观,拓展性好,新增属性时只需要添加代码即可,不需要修改原有构造对象的代码。

  • builder

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
type ServerBuilder struct {
option Server
}

func NewServerBuilder() *ServerBuilder {
return &ServerBuilder{}
}

func (b *ServerBuilder) WithPort(port int) *ServerBuilder {
b.option.Port = port
return b
}

func (b *ServerBuilder) WithProtocol(protocol string) *ServerBuilder {
b.option.Protocol = protocol
return b
}

func (b *ServerBuilder) Build() *Server {
return &b.option
}

适合复杂对象的构造,因为支持链式调用,所以需要分布进行构造对象时为首选。


对象构造方法
https://fatwang1.github.io/2024/12/27/2024122700/
作者
衣云乘风
发布于
2024年12月27日
许可协议