91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

朔州市| 安福县| 沙坪坝区| 长治县| 大余县| 东光县| 盐城市| 邵阳县| 枞阳县| 广水市| 阿拉善左旗| 峨眉山市| 安泽县| 长葛市| 陇西县| 新巴尔虎右旗| 陵水| 葫芦岛市| 郧西县| 永城市| 蒙阴县| 内黄县| 门头沟区| 耿马| 报价| 大足县| 定南县| 寿宁县| 柏乡县| 民勤县| 东方市| 儋州市| 杭锦后旗| 大化| 青岛市| 沙河市| 利津县| 盐山县| 来安县| 防城港市| 饶河县|