一个色综合亚洲更新最快,被大鸡巴爆操的刺激视频,亚洲免费看黄片av大全,免费无码黄网站在线观看

您的位置:首頁(yè) > 滾動(dòng) >

責(zé)任鏈模式-Golang實(shí)現(xiàn)_世界快看

2023-05-06 19:21:28 來(lái)源:清一色財(cái)經(jīng)

責(zé)任鏈模式會(huì)解決這種問(wèn)題。增加功能時(shí),增加鏈上的處理者即可。不同的維護(hù)者維護(hù)自己的處理者。

?責(zé)任鏈模式的定義:是一種行為型設(shè)計(jì)模式,請(qǐng)求會(huì)沿著處理者鏈進(jìn)行傳遞。收到請(qǐng)求后,每個(gè)處理者均可對(duì)請(qǐng)求進(jìn)行處理,或?qū)⑵鋫鬟f給鏈的下個(gè)處理者。


(資料圖片僅供參考)

在實(shí)際工作中,常常會(huì)遇到功能擴(kuò)充,有可能會(huì)導(dǎo)致代碼越來(lái)越臃腫或邏輯越來(lái)越復(fù)雜。維護(hù)的程序員也可能不止一個(gè),也會(huì)導(dǎo)致一些混亂。

責(zé)任鏈模式會(huì)解決這種問(wèn)題。增加功能時(shí),增加鏈上的處理者即可。不同的維護(hù)者維護(hù)自己的處理者。

責(zé)任鏈模式滿(mǎn)足單一職責(zé)原則,請(qǐng)求和處理者進(jìn)行了解耦,只要將請(qǐng)求發(fā)給一個(gè)處理者即可;各個(gè)處理者也完成各自的功能。

責(zé)任鏈模式滿(mǎn)足開(kāi)閉原則??梢栽诓桓默F(xiàn)有代碼的情況下在程序中新增處理者。

責(zé)任鏈模式中可以控制請(qǐng)求處理的順序。

下面來(lái)看代碼實(shí)現(xiàn):

我們來(lái)模擬最高指揮部對(duì)各個(gè)作戰(zhàn)部隊(duì)下達(dá)指令的情形。請(qǐng)求者就是最高指揮部(HighCommand),處理者有炮兵部隊(duì)(Artillery)、導(dǎo)彈部隊(duì)(MissileForce)、核部隊(duì)(NuclearForce)。各部隊(duì)對(duì)最高指揮部發(fā)出的攻擊指令進(jìn)行各自的處理。UML圖如下:

interface.go文件:

package maintype Forces interface {  Execute(*HighCommand)  SetNext(Forces)}

artillery.go文件:

package mainimport "fmt"type Artillery struct {  next Forces}func (f *Artillery) Execute(command *HighCommand) {  if command.ShowCommand() == "shell attack" {    fmt.Println("Shell Attack!")    return  }  fmt.Println("Send to next")  f.next.Execute(command)}func (f *Artillery) SetNext(next Forces) {  f.next = next}

missileForce.go文件:

package mainimport "fmt"type MissileForce struct {  next Forces}func (f *MissileForce) Execute(command *HighCommand) {  if command.ShowCommand() == "missile attack" {    fmt.Println("Missile Attack!")    return  }  fmt.Println("Send to next")  f.next.Execute(command)}func (f *MissileForce) SetNext(next Forces) {  f.next = next}

nuclearForce.go文件:

package mainimport "fmt"type NuclearForce struct {  next Forces}func (f *NuclearForce) Execute(command *HighCommand) {  if command.ShowCommand() == "nuclear attack" {    fmt.Println("Nuclear Attack!")    return  }  fmt.Println("Send to next")  f.next.Execute(command)}func (f *NuclearForce) SetNext(next Forces) {  f.next = next}

end.go文件(鏈尾):

package maintype EndChain struct{}func (f *EndChain) Execute(command *HighCommand) {}func (f *EndChain) SetNext(next Forces) {}

client.go文件:

package maintype HighCommand struct {  name string}func (c *HighCommand) ShowCommand() string {  return c.name}

main.go文件:

package mainfunc main() {  // setup chain  end := &EndChain{}  nuclearForce := &NuclearForce{}  nuclearForce.SetNext(end)  missileForce := &MissileForce{}  missileForce.SetNext(nuclearForce)  artillery := &Artillery{}  artillery.SetNext(missileForce)  command := &HighCommand{name: "nuclear attack"}  artillery.Execute(command)}

運(yùn)行g(shù)o run *.go即可。

該例子運(yùn)行結(jié)果為:

最近更新

射洪县| 昌宁县| 绩溪县| 客服| 增城市| 漳浦县| 大邑县| 灵璧县| 定日县| 葫芦岛市| 丰台区| 泊头市| 海伦市| 金门县| 呼玛县| 新绛县| 芷江| 潼关县| 韶关市| 松江区| 二手房| 无极县| 桃园市| 黄陵县| 大连市| 邹平县| 抚宁县| 通化市| 台前县| 甘肃省| 大连市| 肥城市| 萨嘎县| 泸西县| 伊宁市| 赤城县| 丹凤县| 永城市| 二连浩特市| 日照市| 涿州市|