您好,登錄后才能下訂單哦!
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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。