首页 > 其他分享 >20230427 23. 命令模式 - 烧烤点单

20230427 23. 命令模式 - 烧烤点单

时间:2023-06-22 14:55:52浏览次数:34  
标签:20230427 23 Barbecuer void 命令 Command receiver 点单 public

介绍

命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作

命令模式

  • Command类,用来声明执行操作的接口
  • ConcreteCommand类,将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现executeCommand
  • Invoker类,要求该命令执行这个请求
  • Receiver类,知道如何实施与执行一个与请求相关的操作,任何类都可能作为一个接收者

命令模式的优点:

  • 命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开
  • 它能较容易地设计一个命令队列;
  • 在需要的情况下,可以较容易地将命令记入日志;
  • 允许接收请求的一方决定是否要否决请求;
  • 可以容易地实现对请求的撤销和重做;
  • 由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易;

敏捷开发原则告诉我们,不要为代码添加基于猜测的、实际不需要的功能。如果不清楚一个系统是否需要命令模式,一般就不要着急去实现它,事实上,在需要的时候通过重构实现这个模式并不困难,只有在真正需要如撤销/恢复操作等功能时,把原来的代码重构为命令模式才有意义

代码示例

Receiver

public class Barbecuer {
    public void bakeMutton() {
        System.out.println("烤羊肉");
    }

    public void bakeChickenWing() {
        System.out.println("烤鸡翅");
    }
}

Command

public abstract class Command {
    protected Barbecuer receiver;

    public Command(Barbecuer receiver) {
        this.receiver = receiver;
    }

    public abstract void execCommand();
}

Command实现类

public class BakeChickenWingCommand extends Command {
    public BakeChickenWingCommand(Barbecuer receiver) {
        super(receiver);
    }

    @Override
    public void execCommand() {
        receiver.bakeChickenWing();
    }
}


public class BakeMuttonCommand extends Command{
    public BakeMuttonCommand(Barbecuer receiver) {
        super(receiver);
    }

    @Override
    public void execCommand() {
        receiver.bakeMutton();
    }
}

Invoker

public class Waiter {
    private List<Command> orders = new ArrayList<>();

    public void addOrder(Command command) {
        orders.add(command);
    }

    public void removeOrder(Command command) {
        orders.remove(command);
    }

    public void execCommand() {
        for (Command command : orders) {
            command.execCommand();
        }
    }
}

客户端

public class Test {
    public static void main(String[] args) {
        Barbecuer barbecuer = new Barbecuer();
        Waiter waiter = new Waiter();

        waiter.addOrder(new BakeMuttonCommand(barbecuer));
        waiter.addOrder(new BakeChickenWingCommand(barbecuer));

        waiter.execCommand();
    }
}

标签:20230427,23,Barbecuer,void,命令,Command,receiver,点单,public
From: https://www.cnblogs.com/huangwenjie/p/17490415.html

相关文章

  • 20230428 24. 职责链模式 - 审批流程
    介绍职责链模式(ChainofResponsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。Handler类,定义一个处理请示的接口ConcreteHandler类,具体处理者类,处理它所负责的请......
  • 20230430 26. 享元模式 - 网站复用
    介绍享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。在享元对象内部并且不会随环境改变而改变的共享部分,可以称为是享元对象的内部状态,而随环境改变而改变的、不可以共享的状态就是外部状态了。事实上,享元模式可以避免大量非常相似类的开销。在程序设计中,有时需......
  • 20230430 27. 解释器模式 - 音符
    解释器模式(interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器......
  • 22.04.1 wine8.10 完美安装同花顺最新版THS_9.20.40_20230613
    Linuxluma5.19.0-45-generic#46~22.04.1-UbuntuSMPPREEMPT_DYNAMICWedJun715:06:04UTC20x86_64x86_64x86_64GNU/Linux目前测试的结果除了模拟委托下单出现问题,其他的暂时未发现任何问题。wine8.10gdiplus需要单独安装,否则同花顺的弹幕滚动无效同花顺字体......
  • 2023 年 6 月训练记录
    训练中考终于考完了!!!前面的题慢慢施工ing……ARC107FSumofAbs首先,我们现默认所有节点都被删了,可以用\(A_i\)的收益插入第\(i\)个节点。由于是求最大值,所以绝对值可以看作是限制有边的点同号。我们考虑建图,对于第\(i\)个点,我们建两个点\((i,-)\)和\((i,+)\)表示取......
  • ORACLE 新闻速递 ORACLE 23C 免费提供给开发者 为什么???
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。以下是新闻速递分析师们表示,Oracle推出新的面向开发人员版本数据库的策略变化,与该公司计划捍卫其市场主导地位和寻求采用创新方式......
  • 2023.6.21 鲜花
    最近总是回忆起许多初中时的事情。记得当时和hyj做同桌的时候,经常被hyj,hrq和cym带着卷;经常下午cym会带一个零食,然后我们4个上课分着吃;还有在初三全班大部分人都pj1=的时候我们4个全部2=,很有趣很有趣。还记得当时老师准备重新安排座位的时候我竟然还满怀期待,后来......
  • Kali Linux 2023.2为Xfce版带来PipeWire支持
    Kali Linux 2023.2为Xfce版带来PipeWire支持,彻底改造i3桌面,这个版本还引入了一个新的Hyper-VVM镜像,以及几个新的黑客工具。OffensiveSecurity宣布了他们流行的道德黑客和渗透测试GNU/Linux发行版的新版本,带来了新的功能,更新和新的工具,以及许多改进,KaliLinux2023.2。......
  • Kali Linux 2023.2为Xfce版带来PipeWire支持
    Kali Linux 2023.2为Xfce版带来PipeWire支持,彻底改造i3桌面,这个版本还引入了一个新的Hyper-VVM镜像,以及几个新的黑客工具。OffensiveSecurity宣布了他们流行的道德黑客和渗透测试GNU/Linux发行版的新版本,带来了新的功能,更新和新的工具,以及许多改进,KaliLinux2023.2。......
  • Kali Linux 2023.2为Xfce版带来PipeWire支持
    Kali Linux 2023.2为Xfce版带来PipeWire支持,彻底改造i3桌面,这个版本还引入了一个新的Hyper-VVM镜像,以及几个新的黑客工具。OffensiveSecurity宣布了他们流行的道德黑客和渗透测试GNU/Linux发行版的新版本,带来了新的功能,更新和新的工具,以及许多改进,KaliLinux2023.2。......