前言:
当有一个请求者在一个类中发送一个命令时,如果我们不改变请求者的代码,那么对应的接收者(在另一个类中)的代码也是唯一的。如果我们想要实现相同的请求者类,执行相同的方法,但是能调用不同类中对应的接受者的方法的话。我们可以在请求者类中传入一个抽象类的对象,这个抽象类的对象被具体命令类实现,并且在这个具体命令类中调用了不同接收者的代码,这样我们就能实现在一个请求者类中,通过传入不同的具体命令类,然后调用不同接收者的方法,代码如下:
1、抽象命令类
abstract class AbstractionCommand
{
public abstract void Operation();
}
2、具体命令类
class ExitCommand : AbstractionCommand
{
public override void Operation()
{
Console.WriteLine($"撤销");
}
}
class CopyCommand : AbstractionCommand
{
public override void Operation()
{
Console.WriteLine($"复制");
}
}
3、请求者类
class Request
{
public AbstractionCommand Command { get; set; }
public void Invoke()
{
Command.Operation ();
}
}
4、调用
第一步、实例化请求者
第二步、实例化抽象命令
第三步、往请求者类中通过设置属性方式传入命令对象
最后一步、调用请求者类中的请求方法
Request request = new Request();
AbstractionCommand command = new CopyCommand();
request.Command = command;
request.Invoke();
command = new ExitCommand ();
request.Command = command;
request.Invoke();
输出:
复制
撤销