日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式--命令(Command)模式

發布時間:2025/3/21 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式--命令(Command)模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模式定義

將一個請求(行為)封裝為一個對象,從而使你可用不同的請求對客戶進行參數化,對請求排隊或記錄請求日志,以及支持可撤銷的操作

類圖

要點總結

  • Command模式的根本目的在于將“行為請求者”與“行為實現者”解耦,在面向對象語言中,常見的實現手段是“將行為抽象為對象”
  • 實現Command接口的具體命令對象ConcreteCommand有時候根據需要可能會保存一些額外的狀態信息,通過使用Composite模式,可以將多個“命令”封裝為一個“復合命令”MacroCommand

Go語言代碼實現

工程目錄

command.go

package Commandimport "fmt"type Person struct {name stringcmd Command }type Command struct {person *Personmethod func() }func NewCommand (p *Person, method func()) Command {return Command{person: p,method: method,} }func (c *Command) Execute(){c.method() }func NewPerson (name string, cmd Command) Person{return Person{name: name,cmd: cmd,} }func (p *Person) Buy() {fmt.Println(fmt.Sprintf("%s is buying ", p.name))p.cmd.Execute() }func (p *Person) Cook() {fmt.Println(fmt.Sprintf("%s is cooking ", p.name))p.cmd.Execute() }func (p *Person) Wash() {fmt.Println(fmt.Sprintf("%s is washing ", p.name))p.cmd.Execute() }func (p *Person) Listen() {fmt.Println(fmt.Sprintf("%s is listening ", p.name))p.cmd.Execute() }func (p *Person) Talk() {fmt.Println(fmt.Sprintf("%s is talking ", p.name))p.cmd.Execute() }

command_test.go

package Commandimport "testing"func TestCommand_Execute(t *testing.T) {laowang := NewPerson("wang", NewCommand(nil, nil))laozhang := NewPerson("zhang", NewCommand(&laowang, laowang.Listen))laofeng := NewPerson("feng", NewCommand(&laozhang, laozhang.Buy))laoding := NewPerson("ding", NewCommand(&laofeng, laofeng.Cook))laoli := NewPerson("li", NewCommand(&laoding, laoding.Wash))laoli.Talk() }

總結

以上是生活随笔為你收集整理的设计模式--命令(Command)模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。