码迷,mamicode.com
首页 > 编程语言 > 详细

大话设计模式_命令模式(Java代码)

时间:2014-06-09 13:15:24      阅读:363      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

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

简单描述:1个Receiver,知道如何执行命令。1个抽象命令,持有一个Receiver的引用,命令的执行则调用Receiver的对应方法(具体命令具体调用相应的方法)。1个Invoker,只有命令的引用(可以是一个或多个),接收命令,并且执行命令的执行方法。客户端知道Receiver、生成命令给Invoker,由Invoker去调用命令自己的执行方法

大话设计模式中的截图:

bubuko.com,布布扣

代码例子:

Receiver类:

bubuko.com,布布扣
 1 package com.longsheng.command;
 2 
 3 public class Receiver {
 4 
 5     public void actionA() {
 6         System.out.println("执行请求A");
 7     }
 8     
 9     public void actionB() {
10         System.out.println("执行请求B");
11     }
12 }
bubuko.com,布布扣

抽象Command类:

bubuko.com,布布扣
 1 package com.longsheng.command;
 2 
 3 public abstract class Command {
 4 
 5     protected Receiver mReceiver;
 6     
 7     public Command( Receiver mReceiver ) {
 8         this.mReceiver = mReceiver;
 9     }
10     
11     public void execute() {
12         
13     }
14     
15 }
bubuko.com,布布扣

ConcreteCommandA类:

bubuko.com,布布扣
 1 package com.longsheng.command;
 2 
 3 public class ConcreteCommandA extends Command {
 4 
 5     public ConcreteCommandA(Receiver mReceiver) {
 6         super(mReceiver);
 7     }
 8     
 9     @Override
10     public void execute() {
11         mReceiver.actionA();
12     }
13 
14 }
bubuko.com,布布扣

ConcreteCommandB类:

bubuko.com,布布扣
 1 package com.longsheng.command;
 2 
 3 public class ConcreteCommandB extends Command {
 4 
 5     public ConcreteCommandB(Receiver mReceiver) {
 6         super(mReceiver);
 7     }
 8     
 9     @Override
10     public void execute() {
11         mReceiver.actionB();
12     }
13 
14 }
bubuko.com,布布扣

Invoker类:

bubuko.com,布布扣
 1 package com.longsheng.command;
 2 
 3 public class Invoker {
 4 
 5     private Command mCommand;
 6     
 7     public void setCommand(Command mCommand) {
 8         this.mCommand = mCommand;
 9     }
10     
11     public void executeCommand() {
12         mCommand.execute();
13     }
14     
15 }
bubuko.com,布布扣

客户端代码:

bubuko.com,布布扣
 1 package com.longsheng.command;
 2 
 3 public class Client {
 4 
 5     public static void main(String args[]) {
 6         Receiver mReceiver = new Receiver();
 7         Command mCommandA = new ConcreteCommandA(mReceiver);
 8         Command mCommandB = new ConcreteCommandB(mReceiver);
 9         Invoker mInvoker = new Invoker();
10         
11         mInvoker.setCommand(mCommandA);
12         mInvoker.executeCommand();
13         
14         mInvoker.setCommand(mCommandB);
15         mInvoker.executeCommand();
16     }
17     
18 }
bubuko.com,布布扣

运行结果:

1 执行请求A
2 执行请求B

命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分隔开。

如果不清楚一个系统是否需要命令模式,一般就不要着急去实现它,事实上,在需要的时候通过重构实现这个模式并不困难,只有在真正需要如撤销/恢复操作等功能时,把原来的代码重构为命令模式才有意义。

大话设计模式_命令模式(Java代码),布布扣,bubuko.com

大话设计模式_命令模式(Java代码)

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/creasylai19/p/3776835.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!