门面(Facade)向客户端提供使用子系统的统一接口,用于简化客户端使用子系统的操作。
Deployment
、Service
、PVC
三个类
Create()
方法给它本身赋值Get()
方法可以查询它本身Project()
Deployment
、Service
、PVC
三个类Deployment
、Service
、PVC
的Create()
方法创建它和所有子系统Get()
方法调用Deployment
、Service
、PVC
的Cet()
方法查询它和所有子系统project
Create()
方法统一创建所有子系统package main
import "fmt"
//创建一个子系统角色
type Deployment struct {
Name string
Kind string
Image string
volume string
}
func (deployment *Deployment) Create(name string, image string, volume string) {
deployment.Name = name
deployment.Image = image
deployment.Kind = "Deployment"
deployment.volume = "pvc:" + volume
}
func (deployment *Deployment) Get() {
fmt.Printf("%+v\n", deployment)
}
//创建第二个子系统角色
type Service struct {
Name string
Kind string
Selector string
}
func (service *Service) Create(name string, selector string) {
service.Name = name
service.Kind = "Service"
service.Selector = "deployment:" + selector
}
func (service *Service) Get() {
fmt.Printf("%+v\n", service)
}
//创建第三个子系统角色
type PVC struct {
Name string
Kind string
}
func (pvc *PVC) Create(name string) {
pvc.Name = name
pvc.Kind = "PersistentVolumeClaim"
}
func (pvc *PVC) Get() {
fmt.Printf("%+v\n", pvc)
}
//创建门面,它包含了所有子系统
type Project struct {
Name string
Deployment Deployment
Service Service
PVC PVC
}
func (project *Project) Create(name string, image string) {
project.Name = name
project.PVC.Create("pvc_" + name)
project.Deployment.Create(name, image, project.PVC.Name)
project.Service.Create(name, project.Deployment.Name)
}
func (project *Project) Get() {
fmt.Println(project.Name)
project.Deployment.Get()
project.Service.Get()
project.PVC.Get()
}
func main() {
project := &Project{}
project.Create("nginx", "nginx:1.21")
project.Get()
}
nginx
&{Name:nginx Kind:Deployment Image:nginx:1.21 volume:pvc:pvc_nginx}
&{Name:nginx Kind:Service Selector:deployment:nginx}
&{Name:pvc_nginx Kind:PersistentVolumeClaim}