温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java设计模式中的命令模式有什么用

发布时间:2021-11-17 14:43:19 来源:亿速云 阅读:119 作者:小新 栏目:大数据

这篇文章给大家分享的是有关java设计模式中的命令模式有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

 

命令模式 Command

 

Intro

命令模式,将一个请求封装为一个对象,从而使得可以用不同的请求进行参数化,对请求排队或者记录请求日志以及支持可撤销的操作。

命令模式是对命令进行封装,由调用者发起命令请求,接收者执行请求。

当我们调用时,执行的时序首先是调用者类,然后是命令类,最后是接收者类。也就是说一条命令的执行被分成了三步,它的耦合度要比把所有的操作都封装到一个类中要低的多, 而这也正是命令模式的精髓所在:把命令的调用者与执行者分开,使双方不必关心对方是如何操作的。

基本结构:

  • Command:命令的抽象,类中对需要执行的命令进行声明,一般来说要对外暴露一个     Execute  方法用来执行命令
  • ConcreteCommand:具体 Command 的实现类
  • Invoker:调用者,负责调用命令
  • Receiver:接收者,负责接收命令并且执行命令
 

Sample

来看一个示例:

public class Receiver{    public void Action()    {        Console.WriteLine("Action in receiver");    }}
public abstract class Command{    protected readonly Receiver Receiver;
   protected Command(Receiver receiver) =>        Receiver = receiver ?? throw new ArgumentNullException(nameof(receiver));
   public abstract void Execute();}public class ConcreteCommand : Command{    public ConcreteCommand(Receiver receiver) : base(receiver)    {    }
   public override void Execute()    {        Receiver.Action();    }}
public class Invoker{    private Command _command;
   public void SetCommand(Command command)    {        _command = command;    }
   public void ExecuteCommand()    {        _command.Execute();    }}

var receiver = new Receiver();var command = new ConcreteCommand(receiver);var invoker = new Invoker();invoker.SetCommand(command);invoker.ExecuteCommand();
// another samplevar barbecuer = new Barbecuer();var waiter = new Waiter();
waiter.SetOrder(new BakeChickenWingCommand(barbecuer));waiter.SetOrder(new BakeMuttonCommand(barbecuer));waiter.SetOrder(new BakeMuttonCommand(barbecuer));
var willCancelOrder = new BakeMuttonCommand(barbecuer);waiter.SetOrder(willCancelOrder);waiter.CancelOrder(willCancelOrder);
waiter.Notify();
 
 

感谢各位的阅读!关于“java设计模式中的命令模式有什么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI