JS設計模式 命令模式

2021-10-01 22:26:48 字數 1266 閱讀 2545

命令模式(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 建立乙個具體命令物件 並可以設定它的...