將乙個請求封裝為乙個物件,使發出請求的責任和執行請求的責任分割開。這樣兩者之間通過命令物件進行溝通,這樣方便將命令物件進行儲存、傳遞、呼叫、增加和管理。
優點通過引入中介軟體(抽象介面)降低系統的耦合度;
擴充套件性良好,增加或刪除命令非常方便。採用命令模式增加與刪除命令不會影響其他類,即滿足「開閉原則」;
可以實現巨集命令。命令模式可以和組合模式結合,將多個命令裝配成乙個組合命令,即巨集命令;
方便實現undo和redo操作。命令模式可以與後面介紹的備忘錄模式結合,實現命令的撤銷與恢復;
可以在現有命令的基礎上,增加額外功能。 缺點
可能產生大量具體的命令類。因為每乙個具體操作都需要設計乙個具體命令類,這會增加系統的複雜性;
命令模式的結果其實就是接收方的執行結果,但是為了以命令的形式進行架構、解耦請求與實現,引入了額外型別結構,增加了理解上的困難。
結構主要角色:
類圖:
實現
// 呼叫者
class
invoker
public
void
setcommand
(command command)
public
void
call()
}// 抽象命令
inte***ce
command
// 具體命令
class
concretecommand
implements
command
public
void
execute()
}// 接收者
class
receiver
}// 測試客戶端
class
commandpattern
}
當系統的某項操作具備命令語義,且命令實現不穩定時,可以通過命令模式解耦請求與實現。使用抽象命令介面使請求方的**架構穩定,封裝接收方具體命令的實現細節。接收方與抽象命令呈現弱耦合,具備良好的拓展性。
通常適用以下場景:
巨集命令模式,也叫組合命令模式。巨集命令模式包含了一組命令,它充當了具體命令與呼叫者的雙重角色,執行它時將遞迴呼叫它所包含的所有命令。
類圖:實現:
//抽象命令
inte***ce
abstractcommand
//樹葉構件: 具體命令1
class
concretecommand1
implements
abstractcommand
public
void
execute()
}//樹葉構件: 具體命令2
class
concretecommand2
implements
abstractcommand
public
void
execute()
}//樹枝構件: 呼叫者
class
compositeinvoker
implements
abstractcommand
public
void
remove
(abstractcommand c)
public abstractcommand getchild
(int i)
public
void
execute()
}}//接收者
class
compositereceiver
public
void
action2()
}// 呼叫客戶端
public
class
compositecommandpattern
}
設計模式 行為型模式 命令模式
設計模式 行為型模式 命令模式 以乙個mis系統為栗子 mis 管理資訊系統 management information system,mis 是乙個以人為主導的,利用計算機硬體 軟體和網路裝置,進行資訊的收集 傳遞 儲存 加工 整理的系統,以提高組織的經營效率。如下 public abstrac...
設計模式 行為型模式,命令模式(11)
命令模式 command pattern 是一種資料驅動的設計模式,它屬於行為型模式。請求以命令的形式包裹在物件中,並傳給呼叫物件。呼叫物件尋找可以處理該命令的合適的物件,並把該命令傳給相應的物件,該物件執行命令。現在多數應用都有撤銷操作。雖然難以想象,但在很多年裡,任何軟體中確實都不存在撤銷 操作...
設計模式 行為型模式
行為型模式用於描述程式在執行時複雜的流程控制,即描述多個類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,它涉及演算法與物件間職責的分配。行為型模式分為類行為模式和物件行為模式,前者採用繼承機制來在類間分派行為,後者採用組合或聚合在物件間分配行為。由於組合關係或聚合關係比繼承關係耦合度低...