命令模式是將乙個請求封裝為乙個物件,從而使我們可用不同的請求對客戶進行引數化;對請求排隊或者記錄請求日誌,以及支援可撤銷的操作。命令模式是一種物件行為模式,其別名為動作模式或事務模式。
乙個呼叫者想建立乙個物件,只知道物件名稱就可以了;
擴充套件性高,如果想增加乙個產品,只要擴充套件乙個工廠類就可以;
遮蔽產品的具體實現,呼叫者只關心產品的介面;
command:命令
invoker:呼叫者
receiver:接受者
client:客戶端
它們的關係可以這麼來描述:客戶端通過呼叫者傳送命令,命令呼叫接受者執行相應操作。
//電視類
type tv struct
func (p tv) open()
func (p tv) close()
//遙控器上的按鍵
type command inte***ce
type opencommand struct
func (p opencommand) press()
type closecommand struct
func (p closecommand) press()
//呼叫者(遙控器)
type invoker struct
func (p *invoker) setcommand(cmd command)
func (p *invoker) do()
//客戶端
func main()
invoker := invoker
invoker.do()
invoker.setcommand(closecommand)
invoker.do()
}
命令模式實現起來也很簡單,它降低了系統的耦合度,並且還可以任意擴充套件使用不需要修改**,開閉原則體現的淋漓盡致。
接下來介紹復合命令,也叫巨集命令,復合命令其實說白了就是將多個命令儲存起來,通過遍歷這個集合來分別呼叫各個命令。
package main
import "fmt"
//電視類
type tv struct
func (p tv) open()
func (p tv) close()
//遙控器上的按鍵
type command inte***ce
type opencommand struct
func (p opencommand) press()
type closecommand struct
func (p closecommand) press()
//呼叫者(遙控器)
type invoker struct
func (p *invoker) setcommand(cmd command)
func (p *invoker) do()
func newopenclosecommand() *openclosecommand
openclose.cmds = make(command, 2)
return openclose
}type openclosecommand struct
func (p *openclosecommand) addcommand(cmd command)
func (p openclosecommand) press()
}func main() )
openclose.addcommand(closecommand)
invoker := invoker
invoker.setcommand(openclose)
invoker.do()
}
go語言設計模式之工廠模式 位元組教育
工廠模式 factory pattern 是最常用的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。在工廠模式中,建立物件時不會對客戶端暴露建立邏輯,並且時通過使用乙個共同的介面來執行新的建立的物件。乙個呼叫者想建立乙個物件,只知道物件名稱就可以了 擴充套件性高,如果...
go語言設計模式之單例模式 位元組教育
單例模式,是一種常用的軟體設計模式,在他的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項且該是例易於外界訪問,從而方便對例項個數的控制並節約系統資源。懶漢模式是開源專案中使用最多的一種,最大的缺點是分執行緒安全的。懶漢模式 type singleton stru...
設計模式 命令模式 Go語言描述
說起命令,大家第一反應可能就是我們平時敲的各種命令,啪啪啪幾行命令下去就可以完成一些功能,在看到命令模式這個詞後,可能大家也會和我一樣認為這裡的命令就是執行一些簡單任務的功能,然而並不是,這裡的命令更多的像是我們發出的請求或者電視遙控器的按鍵.這樣吧,咱們先來看看命令模式的定義,然後再從生活中找實際...