选项设计模式

在对象属性频繁变更时,尽量避免其他无关属性的影响

  • 需求,结构体变,构造函数不变
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)
}

猜你喜欢

转载自blog.csdn.net/qq_38900565/article/details/107430621