Golang之函数选项模式

仅做记录
/*
   Functional Options函数选项模式(简称FOP模式)
   既保持了兼容性,而且每增加1个新属性只需要1个With函数即可,大大减少了修改代码的风险
*/
package main

import "fmt"

/*
	Functional Options函数选项模式(简称FOP模式)
	既保持了兼容性,而且每增加1个新属性只需要1个With函数即可,大大减少了修改代码的风险
*/

type Student struct {
	Name string
	Age  int
	Sex  string
}

//定义类型函数
type StudentOption func(*Student)

//创建带有age的构造函数
func WithAge(age int) StudentOption {
	return func(s *Student) {
		s.Age = age
	}
}

func WithSex(sex string) StudentOption {
	return func(s *Student) {
		s.Sex = sex
	}
}

//创建带有默认值的构造函数
func NewStudent(name string, options ...StudentOption) *Student {
	student := &Student{Name: name}
	for _, o := range options {
		o(student)
	}
	return student
}

func main() {
	student := NewStudent("fourier", WithAge(6), WithSex("男"))
	fmt.Println(student)
	teacher := NewTeacher("fourier", WithTeacherAge(20), WithGender("男"))
	fmt.Println(teacher)
}

type Teacher struct {
	Name   string
	Age    int
	Gender string
}

type TeacherOptions func(*Teacher)

func WithTeacherAge(age int) TeacherOptions {
	return func(teacher *Teacher) {
		teacher.Age = age
	}
}

func WithGender(gender string) TeacherOptions {
	return func(teacher *Teacher) {
		teacher.Gender = gender
	}
}

func NewTeacher(name string, options ...TeacherOptions) *Teacher {
	teacher := &Teacher{Name: name}
	for _, option := range options {
		option(teacher)
	}
	return teacher
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值