最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang設計模式之外觀模式的實現(xiàn)

 更新時間:2023年05月11日 11:07:26   作者:未來誰可知  
這篇文章主要介紹了Golang設計模式之外觀模式的實現(xiàn),外觀模式是一種常用的設計模式之一,是一種結構型設計模式,它提供了一個簡單的接口來訪問復雜系統(tǒng)的各種功能,從而降低了系統(tǒng)的復雜度,需要詳細了解可以參考下文

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語言使用cgo導致線程增長的原因

    源碼分析Go語言使用cgo導致線程增長的原因

    這篇文章主要從一個cgo調(diào)用開始解析Go語言源碼,從而分析一下造成線程增長的原因,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一學習一下
    2023-06-06
  • Go 1.18新特性之泛型的全面講解

    Go 1.18新特性之泛型的全面講解

    本文力求能讓未接觸過泛型編程的人也能較好理解Go的泛型,所以行文可能略顯啰嗦。但是請相信我,看完這篇文章你能獲得對Go泛型非常全面的了解
    2023-03-03
  • Golang極簡入門教程(一):基本概念

    Golang極簡入門教程(一):基本概念

    這篇文章主要介紹了Golang極簡入門教程(一):基本概念,本文講解了Golang的基本知識、基礎語法、相關術語等,需要的朋友可以參考下
    2014-10-10
  • GoFrame框架Scan類型轉(zhuǎn)換實例

    GoFrame框架Scan類型轉(zhuǎn)換實例

    這篇文章主要為大家介紹了GoFrame框架Scan類型轉(zhuǎn)換的實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • golang gorm 計算字段和獲取sum()值的實現(xiàn)

    golang gorm 計算字段和獲取sum()值的實現(xiàn)

    這篇文章主要介紹了golang gorm 計算字段和獲取sum()值的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang gorm 操作mysql及gorm基本用法

    golang gorm 操作mysql及gorm基本用法

    golang 官方的那個操作mysql的有點麻煩所以就使用了gorm,下面就gorm的使用做下簡單介紹,感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • 淺談Go語言的error類型

    淺談Go語言的error類型

    這篇文章主要介紹了淺談Go語言的error類型,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • GoFrame?gredis緩存DoVar及Conn連接對象的自動序列化

    GoFrame?gredis緩存DoVar及Conn連接對象的自動序列化

    這篇文章主要為大家介紹了GoFrame?gredis干貨DoVar?Conn連接對象自動序列化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go log庫的使用示例詳解

    Go log庫的使用示例詳解

    Go語言內(nèi)置的log庫提供了基本的日志記錄功能,支持日志的格式化輸出、設置日志前綴、配置輸出位置等,可以通過標準logger或創(chuàng)建新的Logger對象來使用,log庫簡單易用,但功能有限,可能需要配合第三方日志庫如logrus、zap等來滿足復雜需求
    2024-09-09
  • golang實現(xiàn)圖像驗證碼的示例代碼

    golang實現(xiàn)圖像驗證碼的示例代碼

    這篇文章主要為大家詳細介紹了如何利用golang實現(xiàn)簡單的圖像驗證碼,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-10-10

最新評論

双峰县| 襄汾县| 辉南县| 民勤县| 榆中县| 西城区| 常宁市| 鹿泉市| 大厂| 平和县| 尉犁县| 朝阳县| 巴东县| 湘乡市| 周至县| 民县| 澄江县| 沾益县| 泗水县| 衢州市| 绍兴市| 东明县| 昔阳县| 桃园市| 册亨县| 栾城县| 东山县| 哈尔滨市| 怀仁县| 德钦县| 鱼台县| 荆州市| 中江县| 彩票| 洱源县| 襄城县| 阜南县| 广州市| 乐山市| 平凉市| 府谷县|