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

Go語(yǔ)言基礎(chǔ)設(shè)計(jì)模式之策略模式示例詳解

 更新時(shí)間:2021年11月17日 09:30:53   作者:楓少文  
這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)設(shè)計(jì)模式之策略模式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

在這里插入圖片描述

概述

定義一系列算法,將每個(gè)算法封裝起來(lái)。并讓它們能夠相互替換。策略模式讓算法獨(dú)立于使用它的客戶而變化。

針對(duì)同一類型問(wèn)題的多種處理方式

一、不使用策略模式

package main
import "fmt"
type User struct {
	Name string
}
func (this User) travel(t string) {
	switch t {
	case "飛機(jī)":
		fmt.Printf("%s,飛機(jī)出行\(zhòng)n", this.Name)
	case "火車":
		fmt.Printf("%s,火車出行\(zhòng)n", this.Name)
	case "走路":
		fmt.Printf("%s,走路出行\(zhòng)n", this.Name)
	default:
		fmt.Println("你未選擇了出行方式嗎")
	}
}
func main() {
	User{"張三"}.travel("飛機(jī)")
	User{"張三"}.travel("火車")
	User{"張三"}.travel("走路")
	User{"張三"}.travel("")
}

問(wèn)題:

代碼很多且復(fù)雜,if…else…多,不利于維護(hù)和擴(kuò)展違反了"開(kāi)閉原則",增加新的出行方式必須修改源碼復(fù)用性差,無(wú)法單獨(dú)重用其中的某個(gè)或某些算法

二、策略模式

生活策略模式例子:

張三從廣東去北京【1.坐飛機(jī),2.坐火車,3.走路】鵝廠推出了3種會(huì)員,分別為會(huì)員,超級(jí)會(huì)員、及金牌會(huì)員【皮膚不同,折扣不同】諸葛亮的錦囊妙計(jì)

策略模式涉及到三個(gè)角色:

編號(hào) 角色 描述
1 環(huán)境(Context)角色 持有一個(gè)Strategy的引用
2 抽象策略(Strategy)角色 這是一個(gè)抽象角色,通常由一個(gè)接口或抽象類實(shí)現(xiàn)。此角色給出所有的具體策略類所需的接口
3 具體策略(ConcreteStrategy)角色 包裝了相關(guān)的算法或行為。

UML

在這里插入圖片描述

總結(jié)

優(yōu)點(diǎn):

策略模式提供了對(duì)“開(kāi)閉原則”的完美支持,用戶可以在不修改原有系統(tǒng)的基礎(chǔ)上選擇算法或行為,也可以靈活地-增加新的算法或行為。提供管理相關(guān)的算法族可以替換繼承關(guān)系的辦法。避免使用多重條件轉(zhuǎn)移語(yǔ)句。

缺點(diǎn):

客戶端必須知道所有的策略類,并自行決定使用哪一個(gè)策略類策略模式將造成產(chǎn)生很多策略類,可以通過(guò)使用享元模式在一定程度上減少對(duì)象的數(shù)量

示例

package main
import "fmt"
/*出行方式*/
type Itravel interface {
	Travel()
}
/*飛機(jī)*/
type Aircraft struct{}
/*火車*/
type Train struct{}
/*走路*/
type Walk struct{}
/*具體策略類 1:飛機(jī)出行*/
func (this Aircraft) Travel() {
	fmt.Println("飛機(jī)出行")
}
/*具體策略類 2:火車出行*/
func (this Train) Travel() {
	fmt.Println("火車出行")
}
/*具體策略類 3:走路出行*/
func (this Walk) Travel() {
	fmt.Println("走路出行")
}
/*環(huán)境類*/
type User struct {
	Name    string
	Itravel Itravel
}
func (this User) travel() {
	fmt.Printf("%s", this.Name)
	this.Itravel.Travel()
}
func main() {
	user := User{"張三", Aircraft{}}
	user.travel()
	user = User{"李四", new(Train)}
	user.travel()
	user = User{"王五", &Walk{}}
	user.travel()
}

以上就是Go語(yǔ)言基礎(chǔ)設(shè)計(jì)模式之策略模式示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言策略模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用golang進(jìn)行http,get或postJson請(qǐng)求

    使用golang進(jìn)行http,get或postJson請(qǐng)求

    這篇文章主要為大家詳細(xì)介紹了如何使用golang進(jìn)行http,get或postJson請(qǐng)求,文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-12-12
  • golang?防緩存擊穿singleflight的實(shí)現(xiàn)

    golang?防緩存擊穿singleflight的實(shí)現(xiàn)

    本文主要介紹了golang?防緩存擊穿singleflight的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Go語(yǔ)言結(jié)合grpc和protobuf實(shí)現(xiàn)去中心化的聊天室

    Go語(yǔ)言結(jié)合grpc和protobuf實(shí)現(xiàn)去中心化的聊天室

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言如何結(jié)合grpc和protobuf實(shí)現(xiàn)去中心化的聊天室,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Go如何優(yōu)雅的使用字節(jié)池示例詳解

    Go如何優(yōu)雅的使用字節(jié)池示例詳解

    在編程開(kāi)發(fā)中,我們經(jīng)常會(huì)需要頻繁創(chuàng)建和銷毀同類對(duì)象的情形,這樣的操作很可能會(huì)對(duì)性能造成影響,這時(shí)常用的優(yōu)化手段就是使用對(duì)象池(object pool),這篇文章主要給大家介紹了關(guān)于Go如何優(yōu)雅的使用字節(jié)池的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 深入了解Go語(yǔ)言中context的用法

    深入了解Go語(yǔ)言中context的用法

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中context用法的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-07-07
  • Golang中Model的具體使用

    Golang中Model的具體使用

    本文主要介紹了Golang中Model的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Golang開(kāi)發(fā)Go依賴管理工具dep安裝驗(yàn)證實(shí)現(xiàn)過(guò)程

    Golang開(kāi)發(fā)Go依賴管理工具dep安裝驗(yàn)證實(shí)現(xiàn)過(guò)程

    這篇文章主要為大家介紹了Golang開(kāi)發(fā)Go依賴管理工具dep安裝驗(yàn)證及初始化一系列實(shí)現(xiàn)過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • go mock server的簡(jiǎn)易實(shí)現(xiàn)示例

    go mock server的簡(jiǎn)易實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了go mock server的簡(jiǎn)易實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 總結(jié)Golang四種不同的參數(shù)配置方式

    總結(jié)Golang四種不同的參數(shù)配置方式

    這篇文章主要介紹了總結(jié)Golang四種不同的參數(shù)配置方式,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容戒殺,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Go語(yǔ)言中的匿名結(jié)構(gòu)體用法實(shí)例

    Go語(yǔ)言中的匿名結(jié)構(gòu)體用法實(shí)例

    這篇文章主要介紹了Go語(yǔ)言中的匿名結(jié)構(gòu)體用法,實(shí)例分析了匿名結(jié)構(gòu)體的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02

最新評(píng)論

溆浦县| 安庆市| 灵石县| 娄底市| 丰城市| 丰城市| 拉萨市| 皋兰县| 肇州县| 绍兴市| 寻甸| 汝城县| 融水| 盘锦市| 东山县| 宜川县| 大连市| 鄂伦春自治旗| 岳池县| 民勤县| 鲜城| 常熟市| 磐石市| 讷河市| 黑龙江省| 志丹县| 米易县| 沙坪坝区| 江门市| 江都市| 巨鹿县| 穆棱市| 乌苏市| 湖南省| 乌拉特后旗| 锡林郭勒盟| 额济纳旗| 沧源| 马鞍山市| 体育| 襄垣县|