菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
104
0

命令模式

原创
05/13 14:22
阅读数 93494

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

    (1)命令模式将发出请求的对象和执行请求的对象解耦

    (2)在被解耦的两者之间通过命令对象进行沟通的,命令对象接受者和一个或一组动作。

    (3)调用者通过调用命令对象的execute()发出请求,这会使得接受者的动作被调用。

    (4)调用者可以接受命令当做参数,甚至运行是动态的执行。

 

二、涉及角色请求调用者(会传入命令对象,用来发送请求),请求接受者(实际命令执行者),命令接口(所有具体命令实现这个接口),具体命令(将请求的接受者传递给命令对象)。

具体实例:

      (1) 命令接口

1 public interface Command {
2     public void execute();
3 }

    (2) 具体命令

 1 public class LightOnCommand implements Command{
 2     private Light light;
 3     
 4     public LightOnCommand(Light light){
 5         this.light = light;
 6     }
 7     
 8     @Override
 9     public void execute() {
10         light.on();
11     }
12 }

   (3) 命令接受者

1 public class Light {
2     
3     public void on(){
4         System.out.println("电灯被打开");
5     }
6 }

  (4) 命令调用者

 1 public class SimpleRemoteControl {
 2     private Command slot;
 3     
 4     public SimpleRemoteControl(){}
 5     
 6     public void setCommand(Command slot){
 7         this.slot = slot;
 8     }
 9     public void buttonWasPressed(){
10         slot.execute();
11     }
12     
13 }

(5) 客户端

 1 public class SimpleRemoteControl {
 2     private Command slot;
 3     
 4     public SimpleRemoteControl(){}
 5     
 6     public void setCommand(Command slot){
 7         this.slot = slot;
 8     }
 9     public void buttonWasPressed(){
10         slot.execute();
11     }
12     

三、命令撤销

   调用Command中undo()方法,即命令对象中除了维持接收者对象的引用,同时记录之前执行的命令。来达到撤销的目的。

四、宏命令

   为了一次执行多个命令,可以建立宏命令对象,宏对象中保持了命令的数组,并可以一次执行和撤销相应的命令。

发表评论

0/200
104 点赞
0 评论
收藏
为你推荐 换一批