一、命令模式(Command)的定义

将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录日志,以及支持可撤销的操作,将”发出请求的对象”和”接收与执行这些请求的对象”分隔开来。

二、命令模式参与者

1.Command

声明执行操作的接口。

2.ConcreteCommand

将一个接收者对象绑定于一个动作。

调用接收者相应的操作,以实现Execute。

3.Client

创建一个具体命令对象并设定它的接收者。

4.Invoker

要求该命令执行这个请求。

5.Receiver

知道如何实现与执行一个请求相关的操作。任何类都可能作为一个接收者。

三、具体源码

第一步:定义Command,声明执行操作的接口

//命令接口
public interface Command {//执行操作public void excute();//撤销操作public void unDo();
}

第二步:定义ConcreteCommand,将一个接收者对象绑定于一个动作。

public class ConcreteCommand implements Command {// 持有一个接受者Receiver的引用,绑定一个特定的操作Receiver receiver;public ConcreteCommand(Receiver receiver) {this.receiver = receiver;}@Overridepublic void excute() {// 接受者绑定执行动作receiver.action();}@Overridepublic void unDo() {// 接受者绑定的撤销动作receiver.unAction();}
}

第三步:定义Receiver,知道如何实现与执行一个请求相关的操作

public class Receiver {public void action() {System.out.println("开始执行。。。");}public void unAction() {System.out.println("结束执行。。。");}
}

第四步:定义Invoker,要求该命令执行这个请求。

public class Invoker {// 调用者持有一个命令对象Command command;public Command getCommand() {return command;}public void setCommand(Command command) {this.command = command;}// 执行命令public void excuteCommmand() {command.excute();}// 撤销命令public void undoCommand() {command.unDo();}
}

第五步:定义Client,我们来测试一下我们的命令模式

public class Client {/*** @param args*/public static void main(String[] args) {// 创建命令的接受者Receiver receiver = new Receiver();// 创建命令对象,并设定它的接受者Command command = new ConcreteCommand(receiver);// 创建命令执行者,并将相应的命令作为参数传递给InvokerInvoker invoker = new Invoker();invoker.setCommand(command);// Client端测试一下invoker.excuteCommmand();invoker.undoCommand();}}

运行结果:

开始执行。。。
结束执行。。。

总结:

1、在被解耦的两者之间是通过命令对象进行沟通的,命令对象封装了接收者和一个或一组动作;
2、调用者通过调用命令对象的execute()发出请求,这会使得接收者的动作被调用;
3、调用者可以接受命令当作参数,甚至在运行时动态的进行;
4、命令可以支持撤销,做法是实现一个undo()方法来回到execute()被执行前的状态;
5、命令模式将发出请求的对象和执行请求的对象进行解耦;

Java设计模式:命令模式相关推荐

  1. JAVA 设计模式—————— 命令模式和职责链模式

    学习 Netty 前的准备工作!! 这里,还是先来复习一下 OOP (面向对象)的七大原则: 开闭原则:对扩展开放,对修改关闭 里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立. 依赖倒置原 ...

  2. JAVA设计模式--命令模式

    目录 一.什么是命令式 二.命令模式的适用性 三.命令模式的结构 四.命令模式的优点 五.认识命令模式 六.总结 一.什么是命令式 命令(Command)模式又叫作动作(Action)模式或事务(Tr ...

  3. Java设计模式-命令模式

    命令模式   在软件开发系统中,常常出现"方法的请求者"与"方法的实现者"之间存在紧密的耦合关系.这不利于软件功能的扩展与维护.例如,想对行为进行"撤 ...

  4. java设计模式---命令模式

    1.概念 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于"行为请求者"与"行为实现者"解耦,可实现二者之间的松耦合,以便适应变化. ...

  5. Java设计模式-命令模式Command

    定义 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于"行为请求者"与"行为实现者"解耦,可实现二者之间的松耦合,以便适应变化.分离 ...

  6. Java设计模式(代理模式-模板方法模式-命令模式)

    Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...

  7. 设计模式 命令模式 实例_根据您的命令-命令设计模式

    设计模式 命令模式 实例 命令设计模式是一种广为人知的设计模式,属于行为设计模式("四人帮"的一部分). 顾名思义,它与应用程序中的动作和事件有关. 问题陈述: 假设有一个网页将在 ...

  8. Python设计模式-命令模式

    Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...

  9. Java 设计模式——状态模式

    概述 很多人在说状态模式的时候总拿策略模式来进行对比,可能他们的类图会有一点类似,可我却不认为他们有多么相像.你可以阅读<Java设计模式--策略模式>这篇博客,并与本文对比,以找到蛛丝马 ...

  10. Java设计模式——Builder模式

    前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...

最新文章

  1. html input不可编辑
  2. Android webView 支持缩放及自适应屏幕
  3. 正则表达式之 测试阶段
  4. Python 学习散记
  5. 3237: [Ahoi2013]连通图 线段树分治
  6. python基础内容_python基础-python介绍
  7. GXU - 7D - 区间求和 - 前缀和
  8. 墨菲定律与 IndexOutOfBoundsException(数组越界异常)
  9. 基于avr atmega16单片机控制2路9g舵机进行0-180°旋转,1602显示运行状态,adc采样控制舵机转速。然后适合于初学avr单片机的朋友
  10. 字体图标浅析——什么是字体图标?如何生成?怎么使用?
  11. [日常] Go语言圣经前言
  12. Python 破解 MD5 暗号
  13. openpyxl,重写Worksheet
  14. 编译原理之简单语法分析器(c语言)
  15. java tolist_java – Collectors.toList()返回什么类型的List?
  16. C语言 Windows文件选择对话框
  17. 将视频背景扣掉换成白色相关知识
  18. 短期连载 第1回 万代南梦宫工作室动画的流派 BNS动作捕捉汐留工作室的采访
  19. matlab之列主元素高斯消去法
  20. 人间不值得计算机谱子,黄诗扶《人间不值得》简谱

热门文章

  1. netbios 和smb
  2. 【疑问感受】初见指针——当函数遇到指针
  3. 诗与远方:无题(二十)
  4. ASP.NET Core 设置允许跨域访问
  5. MySQL如何安装离线_mysql8.0.2离线安装配置方法图文教程
  6. flask简单登录注册
  7. SES2 LED控制
  8. 阿里云再降价 数据库产品降20%
  9. Windows10 bash 巨硬和Canonical Ltd.的PY交易
  10. Boot目录下内容丢失导致系统无法启动