JAVA设计模式之命令模式

来源:互联网 发布:自然语言处理 数据挖掘 编辑:程序博客网 时间:2024/05/24 03:59

命令模式:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称为 动作Action模式,事务transaction模式

真正的命令执行者

package com.imust.command;/** * 真正的命令执行者 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月8日 * @project shejimoshi * @package com.imust.command */public class Receiver {    public void action(){        System.out.println("Receiver.action()");    }}

命令发起者

package com.imust.command;/** * 调用者 发起者 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月8日 * @project shejimoshi * @package com.imust.command */public class Invoke {    //也可以通过容器List<Command> 容纳很多的命令对象,进行批处理    //数据库底层数据管理就是这个原理    private Command command;    public Invoke(Command command) {        super();        this.command = command;    }    //业务方法  用于调用命令类的方法    public void call(){        command.execute();    }}

命令接口和实现

package com.imust.command;/** * 命令接口 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月8日 * @project shejimoshi * @package com.imust.command */public interface Command {    /**     * 这个方法是一个返回结果为空的方法     * 实际项目中,可以根据需求设计多个不同的方法     */    void execute();}class ConcreateCommand implements Command{    private Receiver receiver; //命令的真正执行者    public ConcreateCommand(Receiver receiver){        super();        this.receiver = receiver;    }    @Override    public void execute() {        //命令真正执行前或者是后,执行相关的命令        receiver.action();    }}

实现

package com.imust.command;/** * 测试类 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月8日 * @project shejimoshi * @package com.imust.command */public class Client {    public static void main(String[] args) {        Command c = new ConcreateCommand(new Receiver());        Invoke i = new Invoke(c);        i.call();    }}