赞
踩
c# #ifdef命令
设计模式是经过验证的解决方案,用于解决常见的设计问题并减少代码的复杂性。 四个群体的设计模式可分为三类:
命令设计模式属于行为模式类别。 本文探讨了如何在C#中使用命令设计模式。
[ 开发最佳实践:您应采用的5种方法 。 • 如何使测试自动化与敏捷性和发展性保持一致 。 •InfoWorld解释了在设备开发时代的监视 。 • 究竟是什么东西? 探索如何改变软件开发 。 ]
命令设计模式的目的是使动作的请求者与执行动作的对象脱钩。 在命令设计模式中,请求被封装为一个对象,其中包含有关该请求的所有信息。 然后将该对象传递给调用者对象。 然后,调用者对象会寻找适当的对象来处理命令,并将命令传递给该对象。
当您想在应用程序中实现回调,排队任务,跟踪历史记录以及撤消/重做功能时,命令设计模式是一个不错的选择。 命令模式是实现重试机制的理想选择-当您的应用程序希望在以后尚未启动并运行的稍后时间点重新尝试连接到服务时。 命令模式还用于消息排队应用程序,即需要从数据丢失中恢复的应用程序。
在命令模式的经典实现中,您具有四个组件:命令,调用者,接收者和客户端。 命令设计模式的参与者包括:
在下一节中,我们将探讨如何实现命令设计模式。 在我们的示例中,我们将使用以下类实现一个简单的计算器:
考虑以下名为Command的抽象基类,其中包含Execute方法的声明。
public abstract class Command { protected SimpleCalculator receiver; public Command(SimpleCalculator receiver) { this.receiver = receiver; } public abstract int Execute(); }
以下枚举显示了我们的简单计算器将支持的操作。
public enum CommandOption { Add, Substract, Multiply, Divide }
下面是一个名为SimpleCalculator的类。 此类用作Receiver,并包含Add,Subtract,Multiply和Divide方法的定义。
public class SimpleCalculator { private int _x, _y; public SimpleCalculator(int a, int b) { _x = a; _y = b; } public int Add() { return _x + _y; } public int Subtract() { return _x - _y; } public int Multiply() { return _x * _y; } public int Divide() { return _x / _y; } }
具体的命令类扩展了Command抽象基类并实现Execute方法,如下所示。
public class AddCommand : Command { private SimpleCalculator _calculator; public AddCommand(SimpleCalculator calculator) : base(calculator) { _calculator = calculator; } public override int Execute() { return _calculator.Add(); } } public class SubtractCommand : Command { private SimpleCalculator _calculator; public SubtractCommand(SimpleCalculator calculator) : base(calculator) { _calculator = calculator; } public override int Execute() { return _calculator.Subtract(); } } public class MultiplyCommand : Command { private SimpleCalculator _calculator; public MultiplyCommand(SimpleCalculator calculator) : base(calculator) { _calculator = calculator; } public override int Execute() { return _calculator.Multiply(); } } public class DivideCommand : Command { private SimpleCalculator _calculator; public DivideCommand(SimpleCalculator calculator) : base(calculator) { _calculator = calculator; } public override int Execute() { return _calculator.Divide(); } }
以下代码段说明了Invoker类。 它包含两个方法,SetCommand和Execute。 尽管SetCommand用于将命令对象分配给Invoker类中的私有Command引用,但是Execute用于执行命令。
public class Invoker { private Command _command; public void SetCommand(Command command) { _command = command; } public int Execute() { return _command.Execute(); } }
最后,以下代码片段说明了如何使用SimpleCalculator类执行简单计算。
static void Main(string[] args) { SimpleCalculator calculator = new SimpleCalculator(15, 3); var addCommand = new AddCommand(calculator); var substractCommand = new SubtractCommand(calculator); var multiplyCommand = new MultiplyCommand(calculator); var divideCommand = new DivideCommand(calculator); Invoker invoker = new Invoker(); invoker.SetCommand(addCommand); Console.WriteLine("Result is {0}", invoker.Execute()); invoker.SetCommand(substractCommand); Console.WriteLine("Result is {0}", invoker.Execute()); invoker.SetCommand(multiplyCommand); Console.WriteLine("Result is {0}", invoker.Execute()); invoker.SetCommand(divideCommand); Console.WriteLine("Result is {0}", invoker.Execute()); Console.ReadLine(); }
命令设计模式提供了对可扩展性的支持,并减少了命令的调用者和接收者之间存在的耦合。 由于请求被封装到一个独立的对象中,因此您可以参数化具有不同请求的方法,将请求保存在队列中,甚至为可重做或可撤消操作提供支持。
-
翻译自: https://www.infoworld.com/article/3409800/how-to-use-the-command-design-pattern-in-c.html
c# #ifdef命令
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。