命令模式

作者: Stephenwish | 来源:发表于2020-08-03 23:02 被阅读0次
首先一个请求对象,暂时命名为invoke,发出请求,而这个请求用Command来表示,receiver表示接受者,收到消息可以执行,代码表示如下
public class Invoker {
    //长官发出命令
    private Command command;

    public Invoker(Command command) {
        this.command = command;
    }
}
public interface  Command {
    //命令对象本体
     void execute();
}
public class Receiver {

    //执行操作
    public  void doit(){
        System.err.println("do it.....");
    }
    //撤销操作
    public  void undo(){
        System.err.println("undo it.....");
    }
}
命令模式,四个字可以看出依据命令来行事,命令是多个的,所以实现多个命令
public class OrderFruit implements Command{
    private Receiver receiver;
    @Override
    public void execute() {
        receiver.doit();
    }
}


public class OrderDrink implements Command{
    private Receiver receiver;
    @Override
    public void execute() {
        receiver.doit();
    }
}
上面命令的受体都是同一个对象,改动下不同的命令为不同受体,可以抽象一个类,在继承或者实现,其实本质都没有变化
//对Recriver 类进行幻化
public class FruitReceiver {

    //执行操作
    public  void orderFruit(){
        System.err.println("do it.....order fruit");
    }
    //撤销操作
    public  void undo(){
        System.err.println("undo it..... cancal fruit");
    }
}
public class DrinkReceiver {

    //执行操作
    public  void orderFruit(){
        System.err.println("do it.....order drink");
    }
    //撤销操作
    public  void undo(){
        System.err.println("undo it..... cancal drink");
    }
}

相对的改变命令Command受体对象
public class OrderDrink implements Command{
    private DrinkReceiver receiver;
    @Override
    public void execute() {
        receiver.orderDrink();
    }
}

public class OrderFruit implements Command{
    private FruitReceiver receiver;


    @Override
    public void execute() {
        receiver.orderFruit();
    }
}

public class CancelFruit implements Command{
    private FruitReceiver receiver;

    public CancelFruit(FruitReceiver receiver) {
        this.receiver = receiver;
    }

    @Override
    public void execute() {
        receiver.undoFruit();
    }
}



public class CancelDrink implements Command{
    private DrinkReceiver receiver;

    public CancelDrink(DrinkReceiver receiver) {
        this.receiver = receiver;
    }

    @Override
    public void execute() {
        receiver.undoDrink();
    }
}
改造下发请求的人,网上很多写法,能发出命令就可以了
ublic class Invoker {
    //命令收集者
    private List<Command> commands=new ArrayList<>();

    public void addCommand(Command command){
        commands.add(command);
    }

    public void execute(){
        //把命令记录打一遍
        for (Command command : commands) {
            command.execute();
        }
    }
}
设置场景类验证
public class Client {
    public static void main(String[] args) {
        DrinkReceiver drinkReceiver = new DrinkReceiver();//卖水人
        FruitReceiver fruitReceiver = new FruitReceiver();//卖水果人

        Invoker invoker = new Invoker();//把命令收集起来执行
        OrderDrink orderDrink = new OrderDrink(drinkReceiver);//买水
        OrderFruit orderFruit = new OrderFruit(fruitReceiver);//买水果
        invoker.addCommand(orderDrink);
        invoker.addCommand(orderFruit);
        //太贵了,我又不想买了
        CancelDrink cancelDrink = new CancelDrink(drinkReceiver);
        CancelFruit cancelFruit = new CancelFruit(fruitReceiver);
        invoker.addCommand(cancelDrink);
        invoker.addCommand(cancelFruit);

        invoker.execute();
    }
}

相关文章

  • 12.vim的使用技巧

    命令模式 、命令行模式、编辑模式: INSERT 首次进入文件: 命令模式输入: 表示 命令行模式出现...

  • 五、Linux vim编辑器

    vim编辑器三种模式:命令模式、编辑模式、末行模式 1.命令模式: vim进入文件后就是命令模式 1.1 命令模式...

  • 终端操作文件

    VIM 模式切换从命令模式->编辑模式:i,a,o,I,A,O从编辑模式->命令模式:ESC从命令模式->末行模式...

  • vim 操作 && Mac 配置本地Apache

    一、vim 的基本命令操作 vim 的模式: 编辑模式 ,命令模式 编辑模式: 命令模式:可以通过命令 最重要的命...

  • Vim高效编辑器

    Vim程序员高效编辑器 命令模式,输入模式,底线命令模式 默认进入vim就是命令模式,输入i变为输入模式 命令模式...

  • Command模式

    命令模式(Command) 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Tran...

  • 设计模式详解——命令模式

    本篇文章介绍一种设计模式——命令模式。本篇文章内容参考《JAVA与模式》之命令模式。 一、命令模式的概念 命令模式...

  • Vi编辑器

    命令模式 文本输入模式 末行模式。 插入模式 移动光标: 删除命令: 撤销命令: 重复命令 文本行移动: 复制粘贴...

  • JavaScript设计模式七(命令模式)

    JavaScript设计模式七(命令模式) 定义: 命令模式是最简单和优雅的模式之一,命令模式中的命令指的是一个执...

  • Cisco 路由器配置命令大全(二)

    (1)模式转换命令 用户模式----特权模式,使用命令"enable"特权模式----全局配置模式,使用命令"co...

网友评论

    本文标题:命令模式

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