GO设计模式11外观模式

Posted XY丶YX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GO设计模式11外观模式相关的知识,希望对你有一定的参考价值。


package main

import (
	"fmt"
)

//Shape 模型接口
type Shape interface {
	Draw()
}

//Circle 圆形类
type Circle struct{}

//NewCircle 实例化圆形类
func NewCircle() *Circle {
	return &Circle{}
}

//Draw 实现Shape接口
func (c *Circle) Draw() {
	fmt.Println("Circle Draw method.")
}

//Rectangle 矩形类
type Rectangle struct{}

//NewRectangle 实例化圆形类
func NewRectangle() *Rectangle {
	return &Rectangle{}
}

//Draw 实现Shape接口
func (c *Rectangle) Draw() {
	fmt.Println("Rectangle Draw method.")
}

//Square 正方形类
type Square struct{}

//NewSquare 实例化圆形类
func NewSquare() *Square {
	return &Square{}
}

//Draw 实现Shape接口
func (c *Square) Draw() {
	fmt.Println("Square Draw method.")
}

//-------------------------------------------------------------------------------
//ShapeMaker 外观类
type ShapeMaker struct {
	circle    Circle
	square    Square
	rectangle Rectangle
}

//NewShapeMaker 实例化外观类
func NewShapeMaker() *ShapeMaker {
	return &ShapeMaker{
		circle:    Circle{},
		rectangle: Rectangle{},
		square:    Square{},
	}
}

//DrawCircle 调用circle的Draw方法
func (shapeMk *ShapeMaker) DrawCircle() {
	shapeMk.circle.Draw()
}

//DrawRectangle 调用rectangle的Draw方法
func (shapeMk *ShapeMaker) DrawRectangle() {
	shapeMk.rectangle.Draw()
}

//DrawSquare 条用square的Draw方法
func (shapeMk *ShapeMaker) DrawSquare() {
	shapeMk.square.Draw()
}

func main() {
	fmt.Println("hello")
	shapeMaker := NewShapeMaker()
	shapeMaker.circle.Draw()
	shapeMaker.rectangle.Draw()
	shapeMaker.square.Draw()
}

以上是关于GO设计模式11外观模式的主要内容,如果未能解决你的问题,请参考以下文章

go中设计模式之结构型模式

带你认识4种设计模式:代理模式装饰模式外观模式和享元模式

设计模式:学习笔记(11)——外观模式

11.设计模式_外观模式

11.外观模式

设计模式的征途—11.外观(Facade)模式