Command模式

转载 2013年12月04日 10:46:37

14、COMMAND—俺有一个MM家里管得特别严,没法见面,只好借助于她弟弟在我们俩之间传送信息,她对我有什么指示,就写一张纸条让她弟弟带给我。
这不,她弟弟又传送过来一个COMMAND,为了感谢他,我请他吃了碗杂酱面,哪知道他说:"我同时给我姐姐三个男朋友送COMMAND,就数你最小气,才请我吃面。",:-(

命令模式:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。
命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,
何时被执行以及是怎么被执行的。系统支持命令的撤消。

 

 



典型的Command模式需要有一个接口.接口中有一个统一的方法,这就是"将命令/请求封装为对象":
public interface Command {
    public abstract void execute ( );
}


《Java与模式》一书中的例子如下:
/**
 * 客户端(Client)代码
 */
public class Client {
    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Command command = new ConcreteCommand(receiver);
        Invoker invoker = new Invoker(command);
        invoker.action();
    }
}
/**
 * 请求者(Invoker)角色代码
 */
public class Invoker {
    private Command command;
    public Invoker(Command command) {
        this.command = command;
    }
    public void action() {
        command.execute();
    }
}
/**
 * 接收者(Receiver)角色代码
 */
public class Receiver {
    public Receiver() {
        //write code here
    }
    public void action() {
        System.out.println(""Action has been taken);
    }
}
/**
 * 抽象命令角色由Command接口扮演
 */
public class Command {
    void execute();
}
/**
 * 具体命令类
 */
public class ConcreteCommand implements Command {
    private Receiver receiver;
    public ConcreteCommand(Receiver receiver) {
        this.receiver = receiver;
    }
    public void execute() {
        receiver.action();
    }
}


再用某公司写的Command模式,简化代码写个大概样子:
/**
 * 客户端(Client)代码
 */
public class Client {
    public static void main(String[] args) {
        String receiverName = "xAO";
        String methodName = "methodA";
        
        //receiverName这里用Spring的依赖注入来创建Receiver对象
        Command command = new ConcreteCommand(receiverName);
        command.getParameters.put("method", methodName);   //实际代码做了封装,并不是这样直接写的。这里简化一下
        command.getParameters.put("param1", "param1"); //传递参数
        command.getParameters.put("param2", "param2");
        
        Result result = getNewInvoker.execute(command); //创建Invoker对象,并调用receiver执行最终的方法
    }
}
/**
 * 请求者(Invoker)角色代码
 */
public class Invoker {
    private Command command;
    public Invoker(Command command) {
        this.command = command;
    }
    public void action() {
        command.execute();
    }
    
    private BeanFactoryService  beanFactory;
    
    public Result execute(Command command) {
        ApplicationObject ao = beanFactory.getBean(command.getName(), ApplicationObject.class, new XXProcessor(command));
        return ao.execute();  //这里就是接收者Receiver来执行具体方法: 
xAO.methodA();
    }
}

/**
 * 抽象命令角色由Command接口扮演
 */
public class Command {
    //...
    //没有execute()方法
}
/**
 * 具体命令类
 */
public class ConcreteCommand implements Command {
    //也没有execute()方法
    //...
}

操作型模式之Command(命令)模式

1.如果你期望把方法调用封装在对象中,可使用Command(命令)模式 2.举例//命令接口 public interface Command { void exe(); }//命令抽象类:...
  • u014686875
  • u014686875
  • 2016年04月09日 13:30
  • 596

设计模式-----COMMAND模式

COMMAND模式是最简单,最优雅的设计模式之一。COMMAND模式的使用范围非常宽广。 COMMAND模式通过对命令的封装接触了系统的逻辑互联关系和实际连接的设备之间的耦合。简单的说就是COMMA...
  • u013812682
  • u013812682
  • 2016年11月28日 16:44
  • 402

一个Command模式的应用例子

我曾经写过一个小软件,故事是这样的:我们公司有一些设备在外面运行,有一天我接到一个任务,要求我编写一个算法对系统进行控制,改善系统的性能。根据大家的讨论很快制订了算法,我也很快编码完毕。但问题来了...
  • chenjiazhou
  • chenjiazhou
  • 2005年08月24日 20:55
  • 1112

Command模式详解--设计模式(19)

Memento模式来源:       Command模式通过将请求封装到一个对象(Command)中,并将请求的接受者存放到具体的ConcreteCommand类中(Receiver)中,从而实现调用...
  • fanyun_01
  • fanyun_01
  • 2016年07月06日 08:58
  • 1589

设计模式-command模式

定义命令模式   命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。命令对象将动作和接收者包进对象中。 应用场景   在面向对象的软件设计中...
  • u010786109
  • u010786109
  • 2015年05月19日 10:23
  • 923

命令处理器模式(Command Processor)的思考

命令处理器模式(Command Processor)的思考 1.Command Processor模式的概述 具体请参考GOF或者POSA1。 2.思考 1.对于每个命令要求的参数怎么...
  • beafather
  • beafather
  • 2012年01月23日 12:53
  • 952

浅谈JAVA设计模式之——命令模式(Command)

一、概述 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 二、适用性 1.抽象出待执行的动作以参数化某对象。 2.在不同的时刻指...
  • l1028386804
  • l1028386804
  • 2015年05月08日 00:22
  • 4083

深入浅出设计模式(十三):21.观察者模式(Observer)22.命令模式(Command)23.备忘录模式(Memento)

21.观察者模式(Observer)每个月当银行发放工资时,都会有短信自动通知员工,员工就相当于观察者,账户就是被观察者,当账户余额有变动时,会自动通知观察者,这就是观察者模式的实际应用。哪里会使用到...
  • liuquan0071
  • liuquan0071
  • 2016年02月24日 15:01
  • 800

Linux进入root模式很多命令提示Found No Command

如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command not found。那么  首先就要考虑root 的$PATH里是否已经包含了这些环境...
  • u012247980
  • u012247980
  • 2016年10月07日 11:51
  • 576

command 模式

一、 命令(Command)模式 命令(Command)模式属于对象的行为模式【GOF95】。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封...
  • JackieLiuLixi
  • JackieLiuLixi
  • 2014年08月13日 17:36
  • 399
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Command模式
举报原因:
原因补充:

(最多只允许输入30个字)