命令模式(command pattern)是一種資料驅動的設計模式,它屬於行為型模式。請求以命令的形式包裹在物件中,並傳給呼叫物件。呼叫物件尋找可以處理該命令的合適的物件,並把該命令傳給相應的物件,該物件執行命令。
我們要做乙個簡單的編輯器,先來看看沒有使用命令模式的**。(忽略定義方法意義所在)
class
editor
write
(content)
read()
space()
}const editor =
neweditor()
editor.
write
('hello').
space()
.write
('zkk!').
read()
// => 'hello zkk!'
以上**加以擴充套件,如果是普通的編輯需求,確實夠用了。
如果我們要加入撤回和多人編輯的功能,那麼我們就需要維護乙個操作記錄的佇列。
在每個方法中新增記錄操作的相關**,顯然很費力,後期維護成本也很大,我們看看如何通過命令模式來改造。
class
editor
write
(content)
read()
space()
readoperator()
run(
...args)
}const editor =
neweditor()
editor.
run(
'write'
,'hello').
run(
'space').
run(
'write'
,'zkk!').
run(
'read'
)// => 'hello zkk!'
// 輸出操作佇列
editor.
readoperator()
// ["write", "space", "write", "read"]
通過這種模式,我們可以把所有命令包裹在乙個方法中,進行統一的管理,使用者也不需要關心類內部具體實現的變動,只需通過對應的命令引數就可以操作新新增的方法。實現行為請求者與行為實現者的解耦。
與此同時,我們可以對使用者所有的操作記錄進行佇列維護,解決撤銷、多人編輯等的問題。
當然,實際上要比例項複雜的多,通常也會把呼叫者invoker和命令子類command分開維護,增強可擴充套件性。
js設計模式之命令模式
命令模式就是將建立模組的邏輯封裝在乙個物件裡,這個物件提供乙個引數化的請求介面,通過呼叫這個介面並傳遞一些引數實現呼叫命令物件內部中的方法。現在我們需要做乙個活動頁面,平鋪結構,比如每個預覽產品區域,有一行標題,標題下面是產品,只是數量和排列不同。模組實現模組 var viewcommand fun...
設計模式 命令設計模式
一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...
設計模式 命令模式
1 命令模式的角色組成 1 命令角色 command 生命執行操作的介面。介面或抽象類來實現。2 具體命令角色 concrete command 將乙個接收者物件繫結於乙個動作 呼叫接收者相應的操作,以實現命令角色宣告的執行操作的介面。3 客戶角色 client 建立乙個具體命令物件 並可以設定它的...