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
下一篇實現更佳的可擴展的命令模式
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。