有以下名为 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, } }
|
简单直接,参数少的时候很常用。
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 }
|
直观,拓展性好,新增属性时只需要添加代码即可,不需要修改原有构造对象的代码。
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 }
|
适合复杂对象的构造,因为支持链式调用,所以需要分布进行构造对象时为首选。