欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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外部依賴包從vendor,$GOPATH和$GOPATH/pkg/mod查找順序

    Go外部依賴包從vendor,$GOPATH和$GOPATH/pkg/mod查找順序

    這篇文章主要介紹了Go外部依賴包vendor,$GOPATH和$GOPATH/pkg/mod下查找順序,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang環(huán)境變量設置和查看工具go env詳解

    Golang環(huán)境變量設置和查看工具go env詳解

    go env 是 Go 工具鏈中的一個命令,用于設置和查看當前 Golang 環(huán)境的相關信息,對于理解、編譯和運行 Golang 程序非常有用,本文就給大家簡單的介紹一下Golang環(huán)境變量設置和查看工具go env,需要的朋友可以參考下
    2023-07-07
  • go語言-在mac下brew升級golang

    go語言-在mac下brew升級golang

    這篇文章主要介紹了go語言-在mac下brew升級golang,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go語言循環(huán)遍歷含有中文的字符串的方法小結

    Go語言循環(huán)遍歷含有中文的字符串的方法小結

    這篇文章主要介紹了Go語言循環(huán)遍歷含有中文的字符串的幾種方法,文章通過代碼示例講解的非常詳細,具有一定的參考價值,感興趣的小伙伴跟著小編一起來看看吧
    2023-07-07
  • GO?env環(huán)境變量配置命令使用

    GO?env環(huán)境變量配置命令使用

    這篇文章主要為大家介紹了GO?env環(huán)境變量配置命令使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • go使用net/url包來解析URL提取主機部分

    go使用net/url包來解析URL提取主機部分

    這篇文章主要為大家介紹了go使用net/url包來解析URL提取主機部分實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Golang 變量申明的三種方式

    Golang 變量申明的三種方式

    這篇文章主要介紹了Golang 變量申明的三種方式,幫助大家更好的理解和學習golang,感興趣的朋友可以了解下
    2020-08-08
  • Go存儲基礎使用direct io方法實例

    Go存儲基礎使用direct io方法實例

    這篇文章主要介紹了Go存儲基礎之如何使用direct io方法實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 深入了解Golang中占位符的使用

    深入了解Golang中占位符的使用

    在寫?golang?的時候,也是有對應的格式控制符,也叫做占位符,寫這個占位符,需要有對應的數(shù)據(jù)與之對應,不能瞎搞。本文就來和大家聊聊Golang中占位符的使用,希望對大家有所幫助
    2023-03-03
  • 使用client go實現(xiàn)自定義控制器的方法

    使用client go實現(xiàn)自定義控制器的方法

    本文我們來使用client-go實現(xiàn)一個自定義控制器,通過判斷service的Annotations屬性是否包含ingress/http,如果包含則創(chuàng)建ingress,如果不包含則不創(chuàng)建,對client go自定義控制器相關知識感興趣的朋友一起看看吧
    2022-05-05

最新評論