代码位置:k8s.io/apimachinery/pkg/runtime

SchemeBuilder

Overview选项模式 - 图2

SchemeBuilder

用于存放处理 Scheme 的函数

  1. type SchemeBuilder []func(*Scheme) error

NewSchemeBuilder

创建并初始化 SchemeBuilder

  1. func NewSchemeBuilder(funcs ...func(*Scheme) error) SchemeBuilder {
  2. var sb SchemeBuilder
  3. sb.Register(funcs...)
  4. return sb
  5. }

Register

向 SchemeBuilder 注册处理 Scheme 的函数

  1. func (sb *SchemeBuilder) Register(funcs ...func(*Scheme) error) {
  2. for _, f := range funcs {
  3. *sb = append(*sb, f)
  4. }
  5. }

AddToScheme

将 SchemeBuilder 中的函数作用于 Scheme

  1. func (sb *SchemeBuilder) AddToScheme(s *Scheme) error {
  2. for _, f := range *sb {
  3. if err := f(s); err != nil {
  4. return err
  5. }
  6. }
  7. return nil
  8. }

Usage

v1

  1. var (
  2. SchemeBuilderV1 = runtime.NewSchemeBuilder(addKnownTypes)
  3. AddToScheme = SchemeBuilder.AddToScheme
  4. )
  5. func addKnownTypes(scheme *runtime.Scheme) error { ... }

v2

  1. var (
  2. SchemeBuilderV2 = runtime.NewSchemeBuilder()
  3. AddToScheme = SchemeBuilder.AddToScheme
  4. )
  5. func init() { SchemeBuilder.Register(addKnownTypes) }
  6. func addKnownTypes(scheme *runtime.Scheme) error { ... }

AddToScheme

  1. scheme := runtime.NewScheme()
  2. if err := SchemeBuilderV1.AddToScheme(scheme); err != nil { ... }
  3. if err := SchemeBuilderV2.AddToScheme(scheme); err != nil { ... }