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

typical case

组合模式 - 图1

recognizer.decoder

带有修饰器模式

组合模式 - 图2

tree-like

组合模式 - 图3

code

因为 recognizer.decoder 实现了 recognizer.RecognizingDecoder 和 runtime.Decoder 接口,所以 recognizer.decoder 可以是本身的子节点。

recognizer.RecognizingDecoder

  1. type RecognizingDecoder interface {
  2. runtime.Decoder
  3. RecognizesData(peek io.Reader) (ok, unknown bool, err error)
  4. }

recognizer.decoder

  1. type decoder struct {
  2. decoders []runtime.Decoder
  3. }

decoder.NewDecoder

  1. func NewDecoder(decoders ...runtime.Decoder) runtime.Decoder {
  2. return &decoder{
  3. decoders: decoders,
  4. }
  5. }