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

Golang設(shè)計(jì)模式之外觀模式的實(shí)現(xiàn)

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

1. 模擬場(chǎng)景

實(shí)現(xiàn)需求為玩家擁有多個(gè)英雄,在部署好英雄之后,只用點(diǎn)擊進(jìn)攻,不用關(guān)心每個(gè)英雄具體自己的攻擊手段!

2099/12/29 14:19:48 李信釋放大招!
2099/12/29 14:19:48 李白釋放大招!

外觀模式(Facade),為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,此模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。

2. 代碼實(shí)現(xiàn)

2.1 Hero

package main
// 實(shí)例化
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)用所有英雄的攻擊,化為一個(gè)攻擊按鈕
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. 含義

? 由此可見(jiàn),外觀模式十分的簡(jiǎn)單,我們只需在客戶端攻擊即可,內(nèi)部的英雄的任何操作都不需要我們關(guān)注,對(duì)于面向?qū)ο笥幸欢ɑA(chǔ)的朋友,即使沒(méi)有聽(tīng)說(shuō)過(guò)外觀模式,也完全有可能在很多時(shí)候使用它,因?yàn)樗昝赖伢w現(xiàn)了依賴倒轉(zhuǎn)原則和迪米特法則的思想,所以是非常常用的模式之一。

我們使用外觀模式的情況有很多,比如經(jīng)典的MVC三層架構(gòu),可以考慮在數(shù)據(jù)訪問(wèn)層和業(yè)務(wù)邏輯層、業(yè)務(wù)邏輯層和表示層的層與層之間簡(jiǎn)歷外觀Facade,降低耦合。屏蔽了和內(nèi)部復(fù)雜的手段交互過(guò)程,外界更為輕松!

到此這篇關(guān)于Golang設(shè)計(jì)模式之外觀模式的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Go外觀模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 源碼分析Go語(yǔ)言使用cgo導(dǎo)致線程增長(zhǎng)的原因

    源碼分析Go語(yǔ)言使用cgo導(dǎo)致線程增長(zhǎng)的原因

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

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

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

    Golang極簡(jiǎn)入門(mén)教程(一):基本概念

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

    GoFrame框架Scan類(lèi)型轉(zhuǎn)換實(shí)例

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

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

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

    golang gorm 操作mysql及gorm基本用法

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

    淺談Go語(yǔ)言的error類(lèi)型

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

    GoFrame?gredis緩存DoVar及Conn連接對(duì)象的自動(dòng)序列化

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

    Go log庫(kù)的使用示例詳解

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

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

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

最新評(píng)論

塔城市| 六枝特区| 墨江| 建瓯市| 拉萨市| 榕江县| 出国| 汉沽区| 神农架林区| 丰县| 连江县| 长垣县| 滦南县| 峨山| 沙田区| 集贤县| 光泽县| 新巴尔虎右旗| 陵水| 襄城县| 冷水江市| 德庆县| 聂荣县| 永城市| 醴陵市| 泗洪县| 渭源县| 石景山区| 马尔康县| 内乡县| 石林| 顺昌县| 商南县| 宁海县| 镇巴县| 繁昌县| 扎兰屯市| 诸城市| 梁河县| 房山区| 周宁县|