设计模式----命令模式

为了执行某个方法,会直接去调用这个方法,有这么一种情况并不适用于直接去调用方法,那就是未来执行某个方法系统必须满足一个特定的执行顺序或者语境,但是开发者没法去控制这个顺序时,解决这个问题的一个方案就是把方法分装在一个对象当中,这就是命令模式。

相当于有传令官,对整个命令进行封装,然后在依照命令顺序执行。

定义:讲一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化,对请求排队或记录请求日志,并支持可撤销操作。

基本代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public  abstract  class  Command {
     public  abstract  void  execute();
     protected  Receiver receiver;
     public  Command(Receiver receiver){
         this .receiver = receiver;
     }
}
public  class  ConcreteCommand  extends  Command {
 
     public  ConcreteCommand(Receiver receiver){
         super (receiver);
     }
     @Override
     public  void  execute() {
         receiver.action();
     }
 
}

传达着代码:

1
2
3
4
5
6
7
8
9
public  class  Invoker {
     private  Command command; //这里可以很方便的形成一个命令队列,对不要的命令可以删除和增加
     public  void  setCommand(Command command) {
         this .command = command;
     }
     public  void  executeCommand(){
         command.execute();
     }
}
1
2
3
4
5
6
//命令执行者
public  class  Receiver {
     public  void  action(){
         System.out.println( "execute the request" );
     }
}

客户端:

1
2
3
4
5
6
7
public  static  void  main( String [] args) {
         Receiver receiver=  new  Receiver();
         Command command =  new  ConcreteCommand(receiver);
         Invoker invoker =  new  Invoker();
         invoker.setCommand(command);
         invoker.executeCommand();
     }

命令模式的优点很明显的,首先,命令模式可以很容易的设计一个命令的队列,可以较方便的将命令记录到日志中去。可以允许接受请求的哪一方来决定是否要否决请求,可以比较容易的实现对请求的撤销和重做。最后,可以比较容易地实现对请求的撤销和重做。

命令模式适用于以下几种情况:

1、当需要抽象出待执行的动作以便参数化某个对象时。

2、当需要在不同的时刻执行、排列以及执行请求时。

3、当系统需要支持取消操作时。

4、当系统需要记录、修改日志时。

命令模式可以将发送者和接收者完全解耦,发送者和接收者之间不会出现直接引用关系,发送请求的对象只需要知道如何去发送请求,而不必知道如何去完成请求,这就是命令模式的模式动机。

命令模式允许请求的一方和接收的一方相互独立开来,这使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是如何被接收的。以及操作是否被执行,以及是怎么被执行的等。命令模式的关键就在于引入了抽象命令接口,并且发送者针对抽象命令接口进行编程,只有实现了抽象命令接口的具体命令才能与接收者相互关联。

命令模式的优点如下:

1、降低了系统的耦合度。

2、新的命令可以很容易地加入到当前系统中。

3、可以比较容易地设计一个命令队列和组合命令。

4、可以方便地实现对请求的撤销和重做。

 

转载于:https://www.cnblogs.com/silence-hust/p/4170260.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值