Golang設計模式之外觀模式的實現(xiàn)
1. 模擬場景
實現(xià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)部的英雄的任何操作都不需要我們關注,對于面向?qū)ο笥幸欢ɑA的朋友,即使沒有聽說過外觀模式,也完全有可能在很多時候使用它,因為它完美地體現(xiàn)了依賴倒轉(zhuǎn)原則和迪米特法則的思想,所以是非常常用的模式之一。
我們使用外觀模式的情況有很多,比如經(jīng)典的MVC三層架構,可以考慮在數(shù)據(jù)訪問層和業(yè)務邏輯層、業(yè)務邏輯層和表示層的層與層之間簡歷外觀Facade,降低耦合。屏蔽了和內(nèi)部復雜的手段交互過程,外界更為輕松!
到此這篇關于Golang設計模式之外觀模式的實現(xiàn)的文章就介紹到這了,更多相關Go外觀模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
golang gorm 計算字段和獲取sum()值的實現(xiàn)
這篇文章主要介紹了golang gorm 計算字段和獲取sum()值的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
GoFrame?gredis緩存DoVar及Conn連接對象的自動序列化
這篇文章主要為大家介紹了GoFrame?gredis干貨DoVar?Conn連接對象自動序列化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06

