日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

解读设计模式----命令模式(Command Pattern)

發(fā)布時(shí)間:2023/12/10 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解读设计模式----命令模式(Command Pattern) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

***本文與作者原文有一定的偏差,其中加入了一部分是個(gè)人看法,詳細(xì)請(qǐng)查看作者原文。***
原文連接http://www.dofactory.com/Patterns/PatternCommand.aspx

命令模式意圖:
  GOF 在《設(shè)計(jì)模式》一書中闡述其意圖:“將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可取消的操作。”這里所謂的“不同的請(qǐng)求”也既意味著請(qǐng)求可能發(fā)生的變化,是一個(gè)可能擴(kuò)展的功能點(diǎn)。

命令模式UML圖:
         
  Command模式將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可以使用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化。

簡(jiǎn)單示例:

Client
?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????????????//?創(chuàng)建receiver、command和invoker?
12????????????Receiver?receiver?=?new?Receiver();
13
14????????????//根據(jù)多態(tài),父類的引用指向子類對(duì)象
15????????????Command?command?=?new?ConcreteCommand(receiver);
16????????????Invoker?invoker?=?new?Invoker();
17
18????????????//設(shè)置和執(zhí)行命令
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????????///?構(gòu)造器注入
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

運(yùn)行結(jié)果:

Called Receiver.Action()


?
??? 在眾多的設(shè)計(jì)模式中,Command模式是很簡(jiǎn)單也很優(yōu)雅的一種設(shè)計(jì)模式。Command模式它封裝的是命令,把命令發(fā)出者的責(zé)任和命令執(zhí)行者的責(zé)任分開。[TerryLee]

注意:
??? 如果比較類圖結(jié)構(gòu),我門會(huì)發(fā)現(xiàn)Command模式、Strategy模式、State模式是完全一樣的。事實(shí)正是如此,由于他門的設(shè)計(jì)思想都是對(duì)易于變化的部分進(jìn)行抽象、或?yàn)榻涌凇Nㄒ坏膮^(qū)別,就是所抽象的行為職責(zé)不同而已,這一點(diǎn)從各自的名字就可以看出。

參考資料:
TerryLee------.NET設(shè)計(jì)模式系列
Bruce Zhang---《軟件設(shè)計(jì)精要與模式》
www.dofactory.com
本文示例源碼下載
???

轉(zhuǎn)載于:https://www.cnblogs.com/beniao/archive/2008/04/09/1145867.html

總結(jié)

以上是生活随笔為你收集整理的解读设计模式----命令模式(Command Pattern)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。