設計模式系列(行為型模式)之七 命令模式

2021-10-24 04:31:15 字數 1621 閱讀 2051

命令(command)模式的定義如下:將乙個請求封裝為乙個物件,使發出請求的責任和執行請求的責任分割開。這樣兩者之間通過命令物件進行溝通,這樣方便將命令物件進行儲存、傳遞、呼叫、增加與管理。

優點:降低系統的耦合度。命令模式能將呼叫操作的物件與實現該操作的物件解耦。

增加或刪除命令非常方便。採用命令模式增加與刪除命令不會影響其他類,它滿足「開閉原則」,對擴充套件比較靈活。

可以實現巨集命令。命令模式可以與組合模式結合,將多個命令裝配成乙個組合命令,即巨集命令。

方便實現 undo 和 redo 操作。命令模式可以與後面介紹的備忘錄模式結合,實現命令的撤銷與恢復。

缺點:可能產生大量具體命令類。因為計對每乙個具體操作都需要設計乙個具體命令類,這將增加系統的複雜性。

命令模式通常適用於以下場景:

當系統需要將請求呼叫者與請求接收者解耦時,命令模式使得呼叫者和接收者不直接互動。

當系統需要隨機請求命令或經常增加或刪除命令時,命令模式比較方便實現這些功能。

當系統需要執行一組操作時,命令模式可以定義巨集命令來實現該功能。

當系統需要支援命令的撤銷(undo)操作和恢復(redo)操作時,可以將命令物件儲存起來,採用備忘錄模式來實現。

命令模式包含以下主要角色。

抽象命令類(command)角色:宣告執行命令的介面,擁有執行命令的抽象方法 execute()。

具體命令角色(concrete command)角色:是抽象命令類的具體實現類,它擁有接收者物件,並通過呼叫接收者的功能來完成命令要執行的操作。

實現者/接收者(receiver)角色:執行命令功能的相關操作,是具體命令物件業務的真正實現者。

呼叫者/請求者(invoker)角色:是請求的傳送者,它通常擁有很多的命令物件,並通過訪問命令物件來執行相關請求,它不直接訪問接收者。

1.定義乙個抽象命令

//抽象命令

public

abstract

class

command

2.建立乙個呼叫者類

public

class

invoker

public

void

setcommand

(command command)

public

void

call()

}

3.建立乙個接收者類

public

class

receiver

}

4.建立乙個具體的命令,讓接受收者去執行

public

class

concretecommand

extends

command

@override

public

void

execute()

}

5.測試輸出

public

class

test

}//使用者訪問呼叫者的call()方法...

//呼叫者執行命令command了

//接收者的主方法被呼叫了

設計模式 行為型模式 命令模式

將乙個請求封裝為乙個物件,使發出請求的責任和執行請求的責任分割開。這樣兩者之間通過命令物件進行溝通,這樣方便將命令物件進行儲存 傳遞 呼叫 增加和管理。優點通過引入中介軟體 抽象介面 降低系統的耦合度 擴充套件性良好,增加或刪除命令非常方便。採用命令模式增加與刪除命令不會影響其他類,即滿足 開閉原則...

設計模式 行為型模式 命令模式

設計模式 行為型模式 命令模式 以乙個mis系統為栗子 mis 管理資訊系統 management information system,mis 是乙個以人為主導的,利用計算機硬體 軟體和網路裝置,進行資訊的收集 傳遞 儲存 加工 整理的系統,以提高組織的經營效率。如下 public abstrac...

行為型模式之命令模式

命令模式 定義 將乙個請求封裝為乙個物件,從而可用不同的請求對客戶進行引數化 對請求排隊或者記錄請求日誌,一家支援可撤銷的操作。命令模式是一種物件行為型模式,其別名為工作模式或事務模式。命令模式的核心在於引入了命令類,通過命令類來降低傳送者與接收者的耦合度,請求傳送者只需指定乙個命令物件,再通過命令...