189 8069 5689

C#设计模式之命令-创新互联

IronMan之命令

创新互联网站建设公司一直秉承“诚信做人,踏实做事”的原则,不欺瞒客户,是我们最起码的底线! 以服务为基础,以质量求生存,以技术求发展,成交一个客户多一个朋友!专注中小微企业官网定制,网站制作、网站建设,塑造企业网络形象打造互联网企业效应。

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

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

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

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

1     /// 
2     /// 抽象命令
3     /// 
4     public abstract class Command
5     {
6         public abstract void Execute();
7     }
8     /// 
9     /// 具体命令类(示例部件***命令)
10     /// 
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     /// 
2     /// 命令板
3     /// 
4     public class CommandList
5     {
6         private List commands = new List();
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     /// 
2     /// 命令板
3     /// 
4     public class CommandList
5     {
6         private List commands = new List();
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

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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:C#设计模式之命令-创新互联
本文链接:http://jkwzsj.com/article/iejcp.html

其他资讯