命令模式 —— 上令下达

2020-04-04  本文已影响0人  lfeilu

生活的理想,就是为了理想的生活。——张闻天

1、定义

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

意思是:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
简单来说,命令模式就是将发送者、接收者和调用命令封装成对象,客户端调用的时候可以选择不同的对象,从而实现发送者和接收者的完全解耦。

2、组成角色

命令模式包含如下角色:

3、使用实例

命令接口和命令实现类

public interface Command {
    void execute();
}

public class OpenTvCommand implements Command {
    HuaWeiTv tv;
    public OpenTvCommand(HuaWeiTv tv){
        this.tv = tv;
    }
    @Override
    public void execute() {
        tv.open();
    }
}

public class ChangeTvCommand implements Command {
    HuaWeiTv tv;
    public ChangeTvCommand(HuaWeiTv tv){
        this.tv = tv;
    }
    @Override
    public void execute() {
        tv.change();
    }
}

public class CloseTvCommand implements Command {

    HuaWeiTv tv;
    public CloseTvCommand(HuaWeiTv tv){
        this.tv = tv;
    }

    @Override
    public void execute() {
        tv.close();
    }
}

接收者(执行命令)

public class HuaWeiTv {

    public void open(){
        System.out.println("打开电视");
    }

    public void change(){
        System.out.println("切换频道");
    }

    public void close(){
        System.out.println("关闭电视");
    }
}

执行者(发起执行命令对象)

public class RemoteControl {

    private OpenTvCommand openTvCommand;
    private ChangeTvCommand changeTvCommand;
    private CloseTvCommand closeTvCommand;

    public RemoteControl(OpenTvCommand openTvCommand,ChangeTvCommand changeTvCommand,CloseTvCommand closeTvCommand){
        this.openTvCommand = openTvCommand;
        this.changeTvCommand = changeTvCommand;
        this.closeTvCommand = closeTvCommand;
    }

    public void open(){
        openTvCommand.execute();
    }

    public void change(){
        changeTvCommand.execute();
    }

    public void close(){
        closeTvCommand.execute();
    }
}

客户端类

public class Main {
    public static void main(String[] args) {
        HuaWeiTv huaWeiTv = new HuaWeiTv();
        OpenTvCommand open = new OpenTvCommand(huaWeiTv);
        ChangeTvCommand change = new ChangeTvCommand(huaWeiTv);
        CloseTvCommand close = new CloseTvCommand(huaWeiTv);

        RemoteControl remoteControl = new RemoteControl(open,change,close);
        remoteControl.open();
        remoteControl.change();
        remoteControl.close();
    }
}

测试结果

打开电视
切换频道
关闭电视

4、总结

命令模式的优点:

命令模式的缺点:

上一篇 下一篇

猜你喜欢

热点阅读