mirror of
https://github.com/Estom/notes.git
synced 2026-02-09 21:36:58 +08:00
go知识重新整理
This commit is contained in:
63
Go/DesignPattern/facade/facade.go
Normal file
63
Go/DesignPattern/facade/facade.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package facade
|
||||
|
||||
import "fmt"
|
||||
|
||||
//外观模式:随着项目越来越大,代码之间可能会有一些顺序,如果把他们封装起来,
|
||||
//那么对于调用者而言,
|
||||
//就只需要调用一个函数 ,而并不需要知道这个函数里面具体做了什么,有什么依赖顺序
|
||||
|
||||
//隐藏了内部实现,调用者只需要调用一个函数
|
||||
//New apiImpl
|
||||
func NewAPI() API {
|
||||
return &apiImpl{
|
||||
a: NewAmoudleAPI(),
|
||||
b: NewBMoudleAPI(),
|
||||
}
|
||||
}
|
||||
|
||||
//API是一个外观模式 接口
|
||||
type API interface {
|
||||
Test() string
|
||||
}
|
||||
|
||||
//外观模式实现
|
||||
type apiImpl struct {
|
||||
a AMouduleAPI
|
||||
b BMouduleAPI
|
||||
}
|
||||
|
||||
func (a *apiImpl) Test() string {
|
||||
aRet := a.a.TestA()
|
||||
bRet := a.b.TestB()
|
||||
return fmt.Sprintf("%s\n%s", aRet, bRet)
|
||||
}
|
||||
|
||||
//New aMoudleImpl
|
||||
func NewAmoudleAPI() AMouduleAPI {
|
||||
return &aMouduleImpl{}
|
||||
}
|
||||
|
||||
//AMouduleAPI
|
||||
type AMouduleAPI interface {
|
||||
TestA() string
|
||||
}
|
||||
type aMouduleImpl struct{}
|
||||
|
||||
func (*aMouduleImpl) TestA() string {
|
||||
return "A moudle running"
|
||||
}
|
||||
|
||||
//New bMoudleImpl
|
||||
func NewBMoudleAPI() BMouduleAPI {
|
||||
return &bMoudleImpl{}
|
||||
}
|
||||
|
||||
//BMouduleAPI
|
||||
type BMouduleAPI interface {
|
||||
TestB() string
|
||||
}
|
||||
type bMoudleImpl struct{}
|
||||
|
||||
func (*bMoudleImpl) TestB() string {
|
||||
return "B module running"
|
||||
}
|
||||
13
Go/DesignPattern/facade/facade_test.go
Normal file
13
Go/DesignPattern/facade/facade_test.go
Normal file
@@ -0,0 +1,13 @@
|
||||
package facade
|
||||
|
||||
import "testing"
|
||||
|
||||
var expect = "A moudle running\nB module running"
|
||||
|
||||
func TestFacadeAPI(t *testing.T) {
|
||||
api := NewAPI()
|
||||
ret := api.Test()
|
||||
if ret != expect {
|
||||
t.Fatalf("expect %s,return %s", expect, ret)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user