设计模式_命令模式

不多说,上个代码一目了然

1.命令接口

package com.command;

/**
 * Created by wuyawei on 2017/5/5.
 */
public interface Command {
    //执行命令
    public void execute();
    //撤销命令
    public void undo();
}

2.创建一个真正的命令执行类

package com.command;

/**
 * Created by wuyawei on 2017/5/5.
 * 命令真正执行类
 */
public class Receiver {
    //真正的命令执行者
    public void action(){
        System.out.println("命令真正执行了");
    }
    //真正的命令撤销者
    public void unAction(){
        System.out.println("命令真正的撤销了");
    }
}

3.命令的接口实现

package com.command;

/**
 * Created by wuyawei on 2017/5/5.
 * 命令接口实现
 * 此处用命令接口对象去调用真正的命令执行者,所以在创建命令接口对象的时候要在构造中传入真正的命令执行者引用
 */
public class CreateXCommand implements Command {
    private Receiver receiver;

    public CreateXCommand(Receiver receiver){
        this.receiver = receiver;
    }
    @Override
    public void execute() {
        receiver.action();
    }

    @Override
    public void undo() {
        receiver.unAction();
    }
}

4.

package com.command;

/**
 * Created by wuyawei on 2017/5/5.
 * 用命令接口对象去调用命令执行
 */
public class Invoker {
    private Command command;

    public Command getCommand() {
        return command;
    }

    public void setCommand(Command command) {
        this.command = command;
    }

    /**
     * 此处用接口去调用真正的命令执行跟撤销操作,实际上是把所有的命令动作分装成了一个对象
     */
    public void runExecute(){
        this.command.execute();
    }
    public void undoCommand(){
        this.command.undo();
    }
}

5.来段测试用例

package com.command;

/**
 * Created by wuyawei on 2017/5/5.
 */
public class Test {
    public static void main(String[] args) {
        //设置接受者
        Receiver receiver = new Receiver();
        //创建命令对象并设置命令的接受者
        Command command =   new CreateXCommand(receiver);
        //创建调用者
        Invoker invoker = new Invoker();
        //给调用者设置命令对象
        invoker.setCommand(command);
        //来个执行跟撤销的测试
        invoker.runExecute();
        invoker.undoCommand();
    }
}

 

posted @ 2017-05-05 14:54  青春不打烊  阅读(90)  评论(0)    收藏  举报