博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大话设计模式之命令模式
阅读量:6000 次
发布时间:2019-06-20

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

命令模式

  将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数优化。对请求排队或记录请求日志,以及支持可撤销的操作。

涉及到的角色描述

  • Receiver接受者角色:接收者,命令传递到这里是应该被执行的
  • Command命令角色:命令接口,需要执行的所有命令都在这里声明
  • Invoker调用者角色:接收到命令,并执行命令
  • ConcreteCommand命令角色:具体命令(可以有多个)

优点

  • 类间解耦:调用者角色与接收者角色之间没有任何依赖关系,调用者实现功能时只需调用Command 抽象类的execute方法就可以,不需要了解到底是哪个接收者执行。
  • 可扩展性:Command的子类可以非常容易地扩展,而调用者Invoker和高层次的模块Client不产生严 重的代码耦合。
  • 命令模式结合其他模式会更优秀:命令模式可以结合责任链模式,实现命令族解析任务;结合模板方法模式,则可以减少 Command子类的膨胀问题。

缺点

  • 使用命令模式可能会导致某些系统有过多的具体命令类。

具体代码实现 

  命令:我要十串羊肉串

  现在就根据上面一条命令用代码进行实现

command命令接口

package com.chenpt.designModel.commandModel;/** * @Author: chen * @Description:  命令接口 * @Date: created in 2018/8/29 * @Modified By: */public interface Command {    void execute();}

  receiver干活对象  烧烤店老板

package com.chenpt.designModel.commandModel;/** * @Author: chen * @Description:  执行者 * @Date: created in 2018/8/29 * @Modified By: */public class Receiver {    public void action(int num){        System.out.println("执行者:好勒! 烤"+num+"串羊肉串");    }}

  ConcreteCommand 具体命令实现

 

package com.chenpt.designModel.commandModel;/** * @Author: chen * @Description:  具体命令(我要十串羊肉串) * @Date: created in 2018/8/29 * @Modified By: */public class ConcreteCommand implements Command {    private int num = 10;    private Receiver receiver;    ConcreteCommand(Receiver receiver){        this.receiver=receiver;    }    @Override    public void execute() {        System.out.println("命令:我要"+num+"串羊肉串");        receiver.action(num);    }}

  Invoker执行相关命令

package com.chenpt.designModel.commandModel;/** * @Author: chen * @Description: 执行类 * @Date: created in 2018/8/31 * @Modified By: */public class Invoker {    private Command command;    Invoker(Command command){        this.command=command;    }    public void action(){        command.execute();    }}

  客户端

package com.chenpt.designModel.commandModel;/** * @Author: chen * @Description: * @Date: created in 2018/8/31 * @Modified By: */public class MainTest {    public static void main(String[] args){        Command command = new ConcreteCommand(new Receiver());        Invoker invoker = new Invoker(command);        invoker.action();    }}//执行结果命令:我要10串羊肉串执行者:好勒! 烤10串羊肉串

  

 

转载于:https://www.cnblogs.com/chenpt/p/9566522.html

你可能感兴趣的文章
SQLServer内核架构剖析 (转载)
查看>>
10 redis--频道发布与消息订阅
查看>>
js nextSibling属性和previousSibling属性概述及使用注意
查看>>
对弈类游戏的人工智能(2)--学习算法
查看>>
敏捷开发(六)- SCRUM全员会议
查看>>
ModSecurity SQL注入攻击
查看>>
LINUX6.3下RHCS的安装文档
查看>>
Windows 7 手动添加受信任证书教程
查看>>
vim基本命令
查看>>
人生就是一场修炼
查看>>
C++中的mutable关键字
查看>>
Linux版 php5.4 升级php7
查看>>
PHP的file_get_contents()方法,将整个文件读入字符串中
查看>>
A*寻路算法lua实现
查看>>
添加Mysql到Windows系统服务
查看>>
ceshi
查看>>
CI框架源码分析
查看>>
@IBDesignable和@IBInspectable
查看>>
sed 指令
查看>>
在Android上用AChartEngine轻松绘制图表
查看>>