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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Go外部依賴包從vendor,$GOPATH和$GOPATH/pkg/mod查找順序
這篇文章主要介紹了Go外部依賴包vendor,$GOPATH和$GOPATH/pkg/mod下查找順序,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12Golang環(huán)境變量設置和查看工具go env詳解
go env 是 Go 工具鏈中的一個命令,用于設置和查看當前 Golang 環(huán)境的相關信息,對于理解、編譯和運行 Golang 程序非常有用,本文就給大家簡單的介紹一下Golang環(huán)境變量設置和查看工具go env,需要的朋友可以參考下2023-07-07