六、命令模式

  1. 定义

    命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

  2. UML图

    这里写图片描述
    说明:

    • Invoker 是命令的执行者,通过调用Command中的execute()方法执行命令。
    • Receiver 是一个接收者,接收着定义了一系列可以执行的动作。
    • ConcreteCommand 是由抽象的Command派生出来的,实现了Command定义的execute() 方法。每一个ConcreteCommand通过持有Receiverd调用者对象,从而调用Reveriver的方法来完成任务。
    • Client 负责的是生成Receriver,具体的ConcreteCommand,然后将Receiver传递到对应的ConcreteCommand中。
    • 动作的执行过程,也是由Client生成一个Invoker对象,再将组装好的ConcreteCommand传递到Invoker中,调用Invoker中的方法执行动作。
  3. 命令模式中的undo

    命令模式中的Undo撤销操作,Invoker调用者中持有Command undoCommand 的变量,保存上一次执行命令的Command对象实例,Client调用undo操作的时候,通过调用undoCommand的undo()方法,进而指定该Command实例注入的接收者执行对应的撤销操作。从而完成undo操作。

  4. 命令模式宏操作

    Client 中通过将一组命令进行绑定的操作,如生成Command[] partyOn = { lightOn, stereoOn, tvOn, hottubOn};对应数据结构,从而完成对指定命令的Command的执行过程。

  5. 命令模式的更过用途

    • 队列请求:命令模式可以将运算打包(一个接收者和一组动作)然后将它传来传去,就像是一般的对象一样。现在,即使在对象背创建很久之后,依然可以被调用。事实上,它甚至可以在不同的线程中被调用。可以利用这些特性衍生一些应用,例如:日程安排,线程池,工作队列等。

    • 一个工作队列,在某一端添加命令,另一端是线程。线程执行动作:从队列中取出一个命令,调用它的execute() 方法,然后等待这个调用完成,然后将此命令对象丢弃,再取出下一个命令。。。。
      其中:工作队列类和计算对象之间是完全解耦的。某一个时间段,线程在进行A任务,另一个时间段可能进行B任务。工作队列需要做的是:取出命令对象,然后调用命令对象的execute()方法。同样的,只要是实现了命令模式的对象,就可以放在队列中,当线程可用的时候,就调用此对象的execute()方法。

    • 日志请求:对某些应用我们需要将所有的动作都记录在日志中,并能在系统死机之后,重新调用这些动作恢复到之前的状态。通过两个方法(Store() 和 load()),命令模式可以支持这一点。在Java中,我们可以利用对象的序列化实现这些方法,但是一般认为序列化最好还是只用在对象的持久化上。
      也就是,在我们执行命令的时候,将历史记录记载在磁盘上。一旦系统死机,我们就将这些命令重新加载,并成批次的调用这些对象的execute() 方法。

  6. 个人理解

    1、命令模式将发出请求的对象和执行请求的对象解耦。
    2、在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接收者和一个或多个动作。
    3、通过调用命令对象的execute()方法,发出请求,这会使得接收者的动作被调用。
    4、调用者可以接收命令当做参数,甚至在运行时动态地进行。
    5、命令模式可以支持撤销操作,做法是实现一个undo()方法来回到execute()被执行前的状态。
    6、宏命令是命令的一种简单的延伸,允许调用多个命令。宏方法也可以支持撤销操作。
    7、实际操作过程中,很常见的用“聪明”命令对象,也就是直接实现了请求,而不是将工作委托给接受者。
    8、命令模式可以用来实现日志和事务请求。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值