博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式梳理——命令模式
阅读量:4096 次
发布时间:2019-05-25

本文共 2166 字,大约阅读时间需要 7 分钟。

一、概述

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

二、UML图示

三、代码实现

1、reciever类

public class Barbecuer {    public void bakeMutton(){        System.out.println("烤羊肉串!");    }    public void bakeChilkenWing(){        System.out.println("烤鸡翅!");    }}

2、command类

public abstract class Command {    protected Barbecuer receiver;    public Command(Barbecuer receiver) {        this.receiver = receiver;    }    public abstract void excuteCommand();}

3、具体命令类

public class BakeChickenWingCommand extends Command {    public BakeChickenWingCommand(Barbecuer receiver) {        super(receiver);    }    @Override    public void excuteCommand() {        receiver.bakeChilkenWing();    }}public class BakeMuttonCommand extends Command {    public BakeMuttonCommand(Barbecuer receiver) {        super(receiver);    }    @Override    public void excuteCommand() {        receiver.bakeMutton();    }}

4、invoker类

public class Waiter {    private List list = new ArrayList<>();    public void setOrder(Command command){        list.add(command);        System.out.println("增加新订单:"+command.getClass().getName());    }    public void cancelOrder(Command command){        list.remove(command);        System.out.println("取消订单:"+command.getClass().getName());    }    public void notifyMessage(){        for (Command comand:list) {            comand.excuteCommand();        }    }}

5、测试类

public class Test {    public static void main(String[] args) {        //开店前准备        Barbecuer boy =new Barbecuer();        BakeChickenWingCommand bakeChickenWingCommand = new BakeChickenWingCommand(boy);        BakeChickenWingCommand bakeChickenWingCommand1 = new BakeChickenWingCommand(boy);        BakeMuttonCommand bakeMuttonCommand = new BakeMuttonCommand(boy);        Waiter girl = new Waiter();        //顾客点菜        girl.setOrder(bakeChickenWingCommand);        girl.setOrder(bakeChickenWingCommand1);        girl.setOrder(bakeMuttonCommand);        //通知厨房        girl.notifyMessage();    }}输出:增加新订单:com.zbf.commandMode.BakeChickenWingCommand增加新订单:com.zbf.commandMode.BakeChickenWingCommand增加新订单:com.zbf.commandMode.BakeMuttonCommand烤鸡翅!烤鸡翅!烤羊肉串!

注:参考文献《大话设计模式》程杰著。

你可能感兴趣的文章
动态规划法(六)鸡蛋掉落问题(一)
查看>>
LeetCode 887.鸡蛋掉落(C++)
查看>>
奇异值分解(SVD)的原理详解及推导
查看>>
算法数据结构 思维导图学习系列(1)- 数据结构 8种数据结构 数组(Array)链表(Linked List)队列(Queue)栈(Stack)树(Tree)散列表(Hash)堆(Heap)图
查看>>
求LCA最近公共祖先的离线Tarjan算法_C++
查看>>
Leetcode 834. 树中距离之和 C++
查看>>
【机器学习】机器学习系统SysML 阅读表
查看>>
最小费用最大流 修改的dijkstra + Ford-Fulksonff算法
查看>>
最小费用流 Bellman-Ford与Dijkstra 模板
查看>>
实现高性能纠删码引擎 | 纠删码技术详解(下)
查看>>
scala(1)----windows环境下安装scala以及idea开发环境下配置scala
查看>>
zookeeper(3)---zookeeper API的简单使用(增删改查操作)
查看>>
zookeeper(4)---监听器Watcher
查看>>
zookeeper(2)---shell操作
查看>>
mapReduce(3)---入门示例WordCount
查看>>
hbase(3)---shell操作
查看>>
hbase(1)---概述
查看>>
hbase(5)---API示例
查看>>
SSM-CRUD(1)---环境搭建
查看>>
SSM-CRUD(2)---查询
查看>>