Java设计模式:命令模式
一、命令模式(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设计模式:命令模式相关推荐
- JAVA 设计模式—————— 命令模式和职责链模式
学习 Netty 前的准备工作!! 这里,还是先来复习一下 OOP (面向对象)的七大原则: 开闭原则:对扩展开放,对修改关闭 里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立. 依赖倒置原 ...
- JAVA设计模式--命令模式
目录 一.什么是命令式 二.命令模式的适用性 三.命令模式的结构 四.命令模式的优点 五.认识命令模式 六.总结 一.什么是命令式 命令(Command)模式又叫作动作(Action)模式或事务(Tr ...
- Java设计模式-命令模式
命令模式 在软件开发系统中,常常出现"方法的请求者"与"方法的实现者"之间存在紧密的耦合关系.这不利于软件功能的扩展与维护.例如,想对行为进行"撤 ...
- java设计模式---命令模式
1.概念 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于"行为请求者"与"行为实现者"解耦,可实现二者之间的松耦合,以便适应变化. ...
- Java设计模式-命令模式Command
定义 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于"行为请求者"与"行为实现者"解耦,可实现二者之间的松耦合,以便适应变化.分离 ...
- Java设计模式(代理模式-模板方法模式-命令模式)
Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...
- 设计模式 命令模式 实例_根据您的命令-命令设计模式
设计模式 命令模式 实例 命令设计模式是一种广为人知的设计模式,属于行为设计模式("四人帮"的一部分). 顾名思义,它与应用程序中的动作和事件有关. 问题陈述: 假设有一个网页将在 ...
- Python设计模式-命令模式
Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...
- Java 设计模式——状态模式
概述 很多人在说状态模式的时候总拿策略模式来进行对比,可能他们的类图会有一点类似,可我却不认为他们有多么相像.你可以阅读<Java设计模式--策略模式>这篇博客,并与本文对比,以找到蛛丝马 ...
- Java设计模式——Builder模式
前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...
最新文章
- html input不可编辑
- Android webView 支持缩放及自适应屏幕
- 正则表达式之 测试阶段
- Python 学习散记
- 3237: [Ahoi2013]连通图 线段树分治
- python基础内容_python基础-python介绍
- GXU - 7D - 区间求和 - 前缀和
- 墨菲定律与 IndexOutOfBoundsException(数组越界异常)
- 基于avr atmega16单片机控制2路9g舵机进行0-180°旋转,1602显示运行状态,adc采样控制舵机转速。然后适合于初学avr单片机的朋友
- 字体图标浅析——什么是字体图标?如何生成?怎么使用?
- [日常] Go语言圣经前言
- Python 破解 MD5 暗号
- openpyxl,重写Worksheet
- 编译原理之简单语法分析器(c语言)
- java tolist_java – Collectors.toList()返回什么类型的List?
- C语言 Windows文件选择对话框
- 将视频背景扣掉换成白色相关知识
- 短期连载 第1回 万代南梦宫工作室动画的流派 BNS动作捕捉汐留工作室的采访
- matlab之列主元素高斯消去法
- 人间不值得计算机谱子,黄诗扶《人间不值得》简谱