美文网首页
behavior:命令模式 (Command Pattern)

behavior:命令模式 (Command Pattern)

作者: 柳源居士 | 来源:发表于2019-03-02 10:27 被阅读0次

把方法调用(method invocation)封装起来。通过封装方法调用,可以用来记录日志、或者重复使用这些封装来实现撤销操作。

定义:
将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。

命令模式的更多用途:队列请求
把命令打包成一组,然后一个一个执行

命令模式的更多用途:日志请求
将操作记录下来,如果系统有异常,从异常点开始进行日志操作。
对于更高级的应用,命令模式可以扩展到事务处理中,就是指一群操作必须全部完成,要么不进行任何操作。

类图.png

实现:

package command;

public interface Command {
    public void execute();
    public void undo();
}

package command;

public class Light {

    void lightOn(){
        System.out.println("light on");
    }

    void lightOff(){
        System.out.println("light off");
    }
}

package command;

public class LightOffCommand implements Command{
    Light light;

    public LightOffCommand(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.lightOff();
    }

    @Override
    public void undo() {
        light.lightOn();
    }
}

package command;

public class LightOnCommand implements Command{
    Light light;

    public LightOnCommand(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.lightOn();
    }

    @Override
    public void undo() {
        light.lightOff();
    }
}

package command;

public class NoCommand implements Command{
    @Override
    public void execute() {

    }

    @Override
    public void undo() {

    }
}

package command;

public class SimpleRemoteControl {
    Command on;
    Command off;

    public SimpleRemoteControl() {
        this.on=new NoCommand();
        this.off=new NoCommand();
    }

    void setOnSlot(Command command){
        this.on=command;
    }

   public void onButtonWasPressed(){
        on.execute();
   }

    void setOffSlot(Command command){
        this.off=command;
    }

    public void offButtonWasPressed(){
        off.execute();
    }
}

package command;

public class TestCommand {
    public static void test(){
        Light light=new Light();
        LightOnCommand lightOnCommand=new LightOnCommand(light);
        LightOffCommand lightOffCommand=new LightOffCommand(light);
        SimpleRemoteControl simpleRemoteControl=new SimpleRemoteControl();
        simpleRemoteControl.setOnSlot(lightOnCommand);
        simpleRemoteControl.onButtonWasPressed();

        simpleRemoteControl.setOffSlot(lightOffCommand);
        simpleRemoteControl.offButtonWasPressed();
    }
}

相关文章

  • behavior:命令模式 (Command Pattern)

    把方法调用(method invocation)封装起来。通过封装方法调用,可以用来记录日志、或者重复使用这些封装...

  • 命令模式(Command Pattern)

    命令模式 命令模式(Command Pattern)又称为行动(Action)模式或交易(Transaction)...

  • 命令模式

    命令模式(Command Pattern) 定义 Encapsulate a request as an obje...

  • 设计模式[18]-命令模式-Comand Pattern

    1.命令模式简介 命令模式(Command Pattern)模式是是行为型(Behavioral)设计模式,将一个...

  • 命令模式(Command Pattern)

    命令模式:将请求封装成对象,以便使用不同的请求,队列,或日志,来参数化其他对象。命令模式也支持可撤销的操作。 命令...

  • 命令模式(Command Pattern)

    命令模式 意图:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支...

  • Command模式(命令模式)

    命令模式(Command Pattern)是一种数据驱动的设计模式。Command有时也被成为事件(event)。...

  • 行为型-Command

    命令模式的原理解读 命令模式的英文翻译是 Command Design Pattern。在 GoF 的《设计模式》...

  • 设计模式-命令模式

    命令模式 介绍: 模式模式(Command Pattern),是行为型设计模式之一。命令模式相对于其他的设计模式来...

  • Swift设计模式——命令模式

    什么是命令模式? 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令...

网友评论

      本文标题:behavior:命令模式 (Command Pattern)

      本文链接:https://www.haomeiwen.com/subject/dlccuqtx.html