解读设计模式----命令模式(Command Pattern)
***本文與作者原文有一定的偏差,其中加入了一部分是個人看法,詳細請查看作者原文。***
原文連接http://www.dofactory.com/Patterns/PatternCommand.aspx
命令模式意圖:
GOF 在《設計模式》一書中闡述其意圖:“將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,以及支持可取消的操作。”這里所謂的“不同的請求”也既意味著請求可能發生的變化,是一個可能擴展的功能點。
命令模式UML圖:
Command模式將一個請求封裝為一個對象,從而使你可以使用不同的請求對客戶進行參數化。
簡單示例:
?1using?System;
?2using?System.Collections.Generic;
?3using?System.Text;
?4
?5namespace?DesignPattern.Command
?6{
?7????class?Program
?8????{
?9????????static?void?Main(string[]?args)
10????????{
11????????????//?創建receiver、command和invoker?
12????????????Receiver?receiver?=?new?Receiver();
13
14????????????//根據多態,父類的引用指向子類對象
15????????????Command?command?=?new?ConcreteCommand(receiver);
16????????????Invoker?invoker?=?new?Invoker();
17
18????????????//設置和執行命令
19????????????invoker.SetCommand(command);
20????????????invoker.ExecuteCommand();
21
22????????????Console.Read();
23????????}
24????}
25}
26
Command
?1using?System;
?2using?System.Collections.Generic;
?3using?System.Text;
?4
?5namespace?DesignPattern.Command
?6{
?7????public?abstract?class?Command
?8????{
?9????????protected?Receiver?receiver;
10
11????????/**////?<summary>
12????????///?構造器注入
13????????///?</summary>
14????????///?<param?name="receiver"></param>
15????????public?Command(Receiver?receiver)
16????????{
17????????????this.receiver?=?receiver;
18????????}
19
20????????public?abstract?void?Execute();
21????}
22}
23
Invoker
?1using?System;
?2using?System.Collections.Generic;
?3using?System.Text;
?4
?5namespace?DesignPattern.Command
?6{
?7????public?class?Invoker
?8????{
?9????????private?Command?command;
10
11????????public?void?SetCommand(Command?command)
12????????{
13????????????this.command?=?command;
14????????}
15
16????????public?void?ExecuteCommand()
17????????{
18????????????command.Execute();
19????????}
20????}
21}
22
Receiver
?1using?System;
?2using?System.Collections.Generic;
?3using?System.Text;
?4
?5namespace?DesignPattern.Command
?6{
?7????public?class?Receiver
?8????{
?9????????public?void?Action()
10????????{
11????????????Console.WriteLine("Called?Receiver.Action()");
12????????}
13????}
14}
15
運行結果:
Called Receiver.Action()
?
??? 在眾多的設計模式中,Command模式是很簡單也很優雅的一種設計模式。Command模式它封裝的是命令,把命令發出者的責任和命令執行者的責任分開。[TerryLee]
注意:
??? 如果比較類圖結構,我門會發現Command模式、Strategy模式、State模式是完全一樣的。事實正是如此,由于他門的設計思想都是對易于變化的部分進行抽象、或為接口。唯一的區別,就是所抽象的行為職責不同而已,這一點從各自的名字就可以看出。
參考資料:
TerryLee------.NET設計模式系列
Bruce Zhang---《軟件設計精要與模式》
www.dofactory.com
本文示例源碼下載
???
轉載于:https://www.cnblogs.com/beniao/archive/2008/04/09/1145867.html
總結
以上是生活随笔為你收集整理的解读设计模式----命令模式(Command Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 需求分析说明书和需求规格说明书
- 下一篇: delphi基本语法