Golang设计模式之-选项模式
在Go语言(Golang)中,选项模式(Option Pattern)是一种常用于构造复杂对象时提供灵活性的设计模式。这种模式允许用户在创建对象时设置一个或多个可选参数,而不需要定义多个构造函数或者创建大量的配置结构体,但在golang中由于不能设置默认参数所有我们就需要通过一些多构造函数来实现
多构造函数实现
package main
import "fmt"
const (
defaultHost = "127.0.0.1"
defaultPort = 8080
)
type Server struct {
Host string
Port int
}
func NewServer() *Server {
return &Server{
Host: defaultHost,
Port: defaultPort,
}
}
func NewServerWithOptions(host string, port int) *Server {
return &Server{
Host: host,
Port: port,
}
}
func main() {
s1 := NewServer()
s2 := NewServerWithOptions("192.168.0.1", 8899)
fmt.Println(s1)
fmt.Println(s2)
}
返回值
&{127.0.0.1 8080}
&{192.168.0.1 8899}
这里我们通过2个构造函数NewServer
和 NewServerWithOptions
来实现的
观察模式实现
package main
import "fmt"
const (
defaultHost = "120.0.0.1"
defaultPort = 8080
)
type Server struct {
Host string
Port int
}
type Option func(server *Server)
func WithHost(host string) Option {
return func(s *Server) {
s.Host = host
}
}
func WithPort(port int) Option {
return func(s *Server) {
s.Port = port
}
}
func newServer(options ...Option) *Server {
s := &Server{
Host: defaultHost,
Port: defaultPort,
}
for _, opt := range options {
opt(s)
}
return s
}
func main() {
s := newServer()
fmt.Println(s)
s1 := newServer(WithHost("192.168.0.1"), WithPort(9988))
fmt.Println(s1)
}
结果
&{120.0.0.1 8080}
&{192.168.0.1 9988}
这里定义了一个Server
结构体,它有2个字段:Host
、Port
。还定义了一个Option
类型,它是一个接受*Server
参数的函数类型。然后,定义了几个返回Option
类型的函数,这些函数可以修改Server
的不同字段。
最后,有一个NewServer
函数,它接受一个Option
类型的可变参数列表,并用它们来配置新创建的Server
实例。这样,就可以在创建Server
时灵活地设置它的不同选项,而不需要为每一种可能的配置组合创建不同的构造函数