IronMan之命令

在本篇中还是围绕着“IronMan”来讲,在上一篇“外观”中我们说到过“控制中心”。它是负责IronMan的核心,所有能想象到的功能都跟它有关系,
就在使用它的时候,发现了一些问题,比如使用它来命令部件做一些操作:

1///<summary>2///控制中心3///</summary>4publicclassCenterController5{6publicvoidAttact()7{8ComponteCasecomCase=newComponteCase();9comCase.Attact();10}11}12///<summary>13///部件14///</summary>15publicclassComponteCase16{17publicvoidAttact()18{19Console.WriteLine("示例部件***1");20}21}

从上面的“控制中心”中可以看出,它是直接使用的部件,如果这时候要添加、修改或者删除部件的***方式,那么“控制中心”也要跟着做出修改。耦合度很大,那怎么样要使“控制中心”和“部件”之间变得是松耦合呢?

命令模式的定义:将一组行为抽象为对象,实现二者之间的松耦合。

1///<summary>2///抽象命令3///</summary>4publicabstractclassCommand5{6publicabstractvoidExecute();7}8///<summary>9///具体命令类(示例部件***命令)10///</summary>11publicclassRealizeCommand:Command12{13privateComponteCasecompontecase=newComponteCase();14publicoverridevoidExecute()15{16//业务操作等等17compontecase.Attact();18}19}

添加了抽象命令类和具体命令类,具体命令类已经代表了一个命令,就是示例部件***:

1CenterControllercentercontroller=newCenterController(newRealizeCommand());2centercontroller.Attact();

也可以再新建其它的具体命令类,引用其它部件,使用其***方法,这样便实现了动态注入,把控制中心和部件
从紧耦合状态改变到了松耦合。
这里会有人有疑问了,如果要执行多个命令怎么办?

1///<summary>2///命令板3///</summary>4publicclassCommandList5{6privateList<Command>commands=newList<Command>();7publicCommandList(){}8publicCommandList(Commandcommand)//动态注入9{10commands.Add(command);11}12publicvoidAddCommand(Commandcommand)13{14commands.Add(command);15}16publicvoidRemoveCommand(Commandcommand)17{18commands.Remove(command);19}20publicvoidExecute()21{22foreach(Commandcommandincommands)23{24command.Execute();25}26}27}

添加一个命令板类,再修改一下控制中心,使得“控制中心”和“抽象命令”间都进行消耦,下面再看一下修改后的“控制中心”:

1///<summary>2///命令板3///</summary>4publicclassCommandList5{6privateList<Command>commands=newList<Command>();7publicCommandList(){}8publicCommandList(Commandcommand)//动态注入9{10commands.Add(command);11}12publicvoidAddCommand(Commandcommand)13{14commands.Add(command);15}16publicvoidRemoveCommand(Commandcommand)17{18commands.Remove(command);19}20publicvoidExecute()21{22foreach(Commandcommandincommands)23{24command.Execute();25}26}27}

使用的方式还是和上一个方式相同,只是上个方式是把命令动态注入,现在修改成了把命令板动态注入。

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

下一篇实现更佳的可扩展的命令模式