亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#設計模式之命令

發布時間:2020-08-09 18:22:06 來源:網絡 閱讀:493 作者:jinyuan0829 欄目:編程語言

IronMan之命令

在本篇中還是圍繞著“IronMan”來講,在上一篇“外觀”中我們說到過“控制中心”。它是負責IronMan的核心,所有能想象到的功能都跟它有關系,
就在使用它的時候,發現了一些問題,比如使用它來命令部件做一些操作:

1     /// <summary>
2     /// 控制中心
3     /// </summary>
4     public class CenterController
5     {
6         public void Attact()
7         {
8             ComponteCase comCase = new ComponteCase();
9             comCase.Attact();
10         }
11     }
12     /// <summary>
13     /// 部件
14     /// </summary>
15     public class ComponteCase
16     {
17         public void Attact()
18         {
19             Console.WriteLine("示例部件***1");
20         }
21     }

從上面的“控制中心”中可以看出,它是直接使用的部件,如果這時候要添加、修改或者刪除部件的***方式,那么“控制中心”也要跟著做出修改。 耦合度很大,那怎么樣要使“控制中心”和“部件”之間變得是松耦合呢?

命令模式的定義:將一組行為抽象為對象實現二者之間的松耦合

1     /// <summary>
2     /// 抽象命令
3     /// </summary>
4     public abstract class Command
5     {
6         public abstract void Execute();
7     }
8     /// <summary>
9     /// 具體命令類(示例部件***命令)
10     /// </summary>
11     public class RealizeCommand : Command
12     {
13         private ComponteCase compontecase = new ComponteCase();
14         public override void Execute()
15         {
16             //業務操作等等
17             compontecase.Attact();
18         }
19     }

添加了抽象命令類和具體命令類,具體命令類已經代表了一個命令,就是示例部件***:

1 CenterController centercontroller = new CenterController(new RealizeCommand());
2 centercontroller.Attact();

也可以再新建其它的具體命令類,引用其它部件,使用其***方法,這樣便實現了動態注入,把控制中心和部件 
從緊耦合狀態改變到了松耦合。
這里會有人有疑問了,如果要執行多個命令怎么辦?

1     /// <summary>
2     /// 命令板
3     /// </summary>
4     public class CommandList
5     {
6         private List<Command> commands = new List<Command>();
7         public CommandList() { }
8         public CommandList(Command command)//動態注入
9         {
10             commands.Add(command);
11         }
12         public void AddCommand(Command command)
13         {
14             commands.Add(command);
15         }
16         public void RemoveCommand(Command command)
17         {
18             commands.Remove(command);
19         }
20         public void Execute()
21         {
22             foreach (Command command in commands)
23             {
24                 command.Execute();
25             }
26         }
27     }

添加一個命令板類,再修改一下控制中心,使得“控制中心”和“抽象命令”間都進行消耦,下面再看一下修改后的“控制中心”:

1     /// <summary>
2     /// 命令板
3     /// </summary>
4     public class CommandList
5     {
6         private List<Command> commands = new List<Command>();
7         public CommandList() { }
8         public CommandList(Command command)//動態注入
9         {
10             commands.Add(command);
11         }
12         public void AddCommand(Command command)
13         {
14             commands.Add(command);
15         }
16         public void RemoveCommand(Command command)
17         {
18             commands.Remove(command);
19         }
20         public void Execute()
21         {
22             foreach (Command command in commands)
23             {
24                 command.Execute();
25             }
26         }
27     }

使用的方式還是和上一個方式相同,只是上個方式是把命令動態注入,現在修改成了把命令板動態注入。

命令模式就到這里了。。END

下一篇實現更佳的可擴展的命令模式

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

哈巴河县| 砚山县| 呼玛县| 当阳市| 石台县| 宝坻区| 临桂县| 化德县| 上林县| 北票市| 镇平县| 泾阳县| 射阳县| 巨野县| 桂林市| 三台县| 织金县| 乌鲁木齐县| 石棉县| 丰都县| 绥江县| 柳州市| 万安县| 淳安县| 历史| 庆阳市| 盐边县| 鄄城县| 定南县| 涟水县| 木里| 临清市| 盘山县| 建阳市| 密山市| 盐池县| 会同县| 黄陵县| 永新县| 玉林市| 巨鹿县|