Golang設計模式之外觀模式的實現(xiàn)
1. 模擬場景
實現(xiàn)需求為玩家擁有多個英雄,在部署好英雄之后,只用點擊進攻,不用關(guān)心每個英雄具體自己的攻擊手段!
2099/12/29 14:19:48 李信釋放大招!
2099/12/29 14:19:48 李白釋放大招!
外觀模式(Facade),為子系統(tǒng)中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。
2. 代碼實現(xiàn)
2.1 Hero
package main
// 實例化
func NewHero() Hero{
return &heroImpl{
LiXin: NewLixinHero(),
LiBai: NewLiBaiHero(),
}
}
// 英雄抽象行為
type Hero interface {
Attack() error
}
// 英雄池
type heroImpl struct {
LiXin LixinHero
LiBai LiBaiHero
}
// 統(tǒng)一的調(diào)用所有英雄的攻擊,化為一個攻擊按鈕
func (h heroImpl) Attack() error {
err := h.LiXin.Attack()
if err!=nil{
return err
}
err = h.LiBai.Attack()
if err!=nil{
return err
}
return nil
}2.2 LiXin
package main
import "log"
// 李信的抽象行為
type LixinHero interface {
Attack() error
}
// 英雄李信
type lixinHero struct {
}
func NewLixinHero() *lixinHero {
return &lixinHero{}
}
// 李信的攻擊手段
func (l lixinHero) Attack() error {
log.Println("李信釋放大招!")
return nil
}2.3 LiBai
package main
import "log"
// 李白的抽象行為
type LiBaiHero interface {
Attack() error
}
// 英雄李白
type libaiHero struct {
}
func NewLiBaiHero() *libaiHero {
return &libaiHero{}
}
// 李白的攻擊手段
func (l libaiHero) Attack() error {
log.Println("李白釋放大招!")
return nil
}2.4 main
部署好后的,一鍵攻擊!!
package main
import "log"
func main(){
hero:=NewHero() // 部署階段
err:=hero.Attack() // 一鍵攻擊
if err!=nil{
log.Fatal(err)
}
}3. 含義
? 由此可見,外觀模式十分的簡單,我們只需在客戶端攻擊即可,內(nèi)部的英雄的任何操作都不需要我們關(guān)注,對于面向?qū)ο笥幸欢ɑA的朋友,即使沒有聽說過外觀模式,也完全有可能在很多時候使用它,因為它完美地體現(xiàn)了依賴倒轉(zhuǎn)原則和迪米特法則的思想,所以是非常常用的模式之一。
我們使用外觀模式的情況有很多,比如經(jīng)典的MVC三層架構(gòu),可以考慮在數(shù)據(jù)訪問層和業(yè)務邏輯層、業(yè)務邏輯層和表示層的層與層之間簡歷外觀Facade,降低耦合。屏蔽了和內(nèi)部復雜的手段交互過程,外界更為輕松!
到此這篇關(guān)于Golang設計模式之外觀模式的實現(xiàn)的文章就介紹到這了,更多相關(guān)Go外觀模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go外部依賴包從vendor,$GOPATH和$GOPATH/pkg/mod查找順序
這篇文章主要介紹了Go外部依賴包vendor,$GOPATH和$GOPATH/pkg/mod下查找順序,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Golang環(huán)境變量設置和查看工具go env詳解
go env 是 Go 工具鏈中的一個命令,用于設置和查看當前 Golang 環(huán)境的相關(guān)信息,對于理解、編譯和運行 Golang 程序非常有用,本文就給大家簡單的介紹一下Golang環(huán)境變量設置和查看工具go env,需要的朋友可以參考下2023-07-07
Go語言循環(huán)遍歷含有中文的字符串的方法小結(jié)
這篇文章主要介紹了Go語言循環(huán)遍歷含有中文的字符串的幾種方法,文章通過代碼示例講解的非常詳細,具有一定的參考價值,感興趣的小伙伴跟著小編一起來看看吧2023-07-07

