在对象属性频繁变更时,尽量避免其他无关属性的影响
- 需求,结构体变,构造函数不变
package main
import "fmt"
// + 需求,结构体变,构造函数不变
// - 选项设计模式
// User ...
type User struct{
Name string
Class string
Age int
isMale bool
}
// Operation 操作User属性方法
type Operation func(u *User)
// NewUser 方法列表
func NewUser(opts ...Operation) *User{
user := &User{
}
for _,opt:= range opts{
opt(user)
}
return user
}
// SetName 设置名称
func SetName(name string) Operation {
return func(u *User){
u.Name = name
}
}
// SetAge 设置年龄
func SetAge(age int) Operation{
return func(u *User){
u.Age = age
}
}
func main(){
u:= NewUser(SetName("jack"),SetAge(18))
fmt.Printf("%#v\n",u)
}