成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

責任鏈模式-Golang實現

開發 前端
責任鏈模式會解決這種問題。增加功能時,增加鏈上的處理者即可。不同的維護者維護自己的處理者。

?責任鏈模式的定義:是一種行為型設計模式,請求會沿著處理者鏈進行傳遞。收到請求后,每個處理者均可對請求進行處理,或將其傳遞給鏈的下個處理者。

在實際工作中,常常會遇到功能擴充,有可能會導致代碼越來越臃腫或邏輯越來越復雜。維護的程序員也可能不止一個,也會導致一些混亂。

責任鏈模式會解決這種問題。增加功能時,增加鏈上的處理者即可。不同的維護者維護自己的處理者。

責任鏈模式滿足單一職責原則,請求和處理者進行了解耦,只要將請求發給一個處理者即可;各個處理者也完成各自的功能。

責任鏈模式滿足開閉原則。可以在不更改現有代碼的情況下在程序中新增處理者。

責任鏈模式中可以控制請求處理的順序。

下面來看代碼實現:

我們來模擬最高指揮部對各個作戰部隊下達指令的情形。請求者就是最高指揮部(HighCommand),處理者有炮兵部隊(Artillery)、導彈部隊(MissileForce)、核部隊(NuclearForce)。各部隊對最高指揮部發出的攻擊指令進行各自的處理。UML圖如下:

interface.go文件:

package main

type Forces interface {
Execute(*HighCommand)
SetNext(Forces)
}

artillery.go文件:

package main

import "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 main

import "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 main

import "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 main

type EndChain struct{}

func (f *EndChain) Execute(command *HighCommand) {}

func (f *EndChain) SetNext(next Forces) {}

client.go文件:

package main

type HighCommand struct {
name string
}

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

main.go文件:

package main

func 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)
}

運行go run *.go即可。

該例子運行結果為:

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2021-12-24 07:50:45

責任鏈模式設計

2012-03-28 13:28:56

Java設計模式

2024-06-04 13:11:52

Python行為設計模式開發

2024-12-03 15:52:45

責任鏈Java

2022-11-01 08:46:20

責任鏈模式對象

2010-04-01 09:10:03

PHP設計模式責任鏈模式

2021-07-14 10:08:30

責任鏈模式加工鏈

2024-01-30 13:15:00

設計模式責任鏈

2023-09-28 08:45:56

開源責任鏈模式

2021-06-05 17:59:00

責任鏈模式設計

2023-09-26 00:27:07

設計模式鏈接

2021-05-25 09:00:52

責任鏈模式設計模式面試經歷

2021-06-09 07:15:15

責任鏈模式漲薪

2025-05-21 01:00:55

2023-06-05 07:55:31

2020-11-17 09:32:57

設計模式責任鏈

2009-03-16 15:55:21

Java責任鏈模式

2024-05-09 12:17:00

責任鏈設計模式

2025-01-03 10:32:26

Spring責任鏈模式

2021-02-11 09:13:27

責任鏈模式業務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91麻豆蜜桃一区二区三区 | 99热精品在线 | 国产精品国产a | 国产视频福利 | 久久大陆 | av天天爽| 亚洲国产精品久久 | 五月槐花香 | 国产精品美女久久久久aⅴ国产馆 | 国产在线精品一区二区三区 | 日本午夜一区二区三区 | 午夜在线电影网 | 一区二区三区免费观看 | 一级片免费视频 | 国产精品久久久久久久白浊 | 日韩精品在线一区 | 精品九九久久 | 亚洲一区成人 | 成人h视频在线 | 天天射影院 | 精品免费国产一区二区三区 | 亚洲天堂av在线 | 国产精品片aa在线观看 | 国产一级特黄aaa大片评分 | 91精品久久久| 亚洲精品视频一区 | 欧美视频1| 国产激情视频网站 | 涩涩视频网站在线观看 | 中文字幕精品一区二区三区精品 | 国产真实精品久久二三区 | 日本一区二区三区免费观看 | 国产高清在线视频 | 五月婷六月丁香 | 欧洲一级视频 | 久久婷婷国产香蕉 | 在线a视频网站 | 金莲网| 一道本在线 | 日韩一区二区免费视频 | 亚洲精品在线视频 |