go知识重新整理

This commit is contained in:
Estom
2021-09-03 05:34:34 +08:00
parent 62309f856a
commit 1bad082e49
291 changed files with 29345 additions and 2 deletions

View File

@@ -0,0 +1,46 @@
package decorator
//装饰模式:使用对象组合的方式,动态改变或增加对象行为
type Component interface {
Calc() int
}
type ConcreteComponent struct{}
func (*ConcreteComponent) Calc() int {
return 0
}
//warp mul
func WarpMulDecorator(c Component, num int) Component {
return &MulDecorator{
Component: c,
num: num,
}
}
type MulDecorator struct {
Component
num int
}
func (m *MulDecorator) Calc() int {
return m.Component.Calc() * m.num
}
func WarpAddDecrator(c Component, num int) Component {
return &AddDecrator{
Component: c,
num: num,
}
}
type AddDecrator struct {
Component
num int
}
func (d *AddDecrator) Calc() int {
return d.Component.Calc() + d.num
}

View File

@@ -0,0 +1,22 @@
/**
* @Author:zhoutao
* @Date:2020/12/11 下午3:46
* @Desc:
*/
package decorator
import (
"testing"
)
func TestDecrator(t *testing.T) {
var c Component = &ConcreteComponent{}
c = WarpAddDecrator(c, 10)
c = WarpMulDecorator(c, 8)
res := c.Calc()
if res != 80 {
t.Fatalf("expect 80 ,return %d", res)
}
}