模板方法模式

在接口中定义算法步骤,子类实现算法步骤。

拉起容器时既可以通过docker,也可以通过containerd。

package main

import "fmt"

type containerHandle struct {
	c containerHandler
}

type containerHandler interface {
	create() error
	start() error
}

func (h containerHandle) startupContainer() error {
	if err := h.c.create(); err != nil {
		return err
	}
	if err := h.c.start(); err != nil {
		return err
	}
	return nil
}

type docker struct{}

func (d docker) create() error {
	fmt.Println("docker create success")
	return nil
}

func (d docker) start() error {
	fmt.Println("docker start success")
	return nil
}

type containerd struct{}

func (c containerd) create() error {
	fmt.Println("containerd create success")
	return nil
}

func (c containerd) start() error {
	fmt.Println("containerd start success")
	return nil
}

func main() {
	h := containerHandle{
		c: docker{},
	}
	h.startupContainer()

	h.c = containerd{}
	h.startupContainer()
}

输出结果

docker create success
docker start success
containerd create success
containerd start success

 

posted on 2023-09-16 22:34  王景迁  阅读(8)  评论(0编辑  收藏  举报

导航