命令模式
为了降低耦合度,将请求的发送者和接收者解耦
发送请求的对象只需要哦知道如何发送请求,而不必知道如何完成请求
对请求排队
记录请求日志
支持撤销操作
核心在于引入命令类
角色
抽象命令类Command
具体命令类ConcreteCommand
调用者Invoker
接收者Receiver
请求的一方不必知道接收请求的一方,更不必知道请求如何被接收、执行、怎么执行、何时执行

看例子,电视遥控器,电视,人。

1.抽象命令类,或接口

package Command;

/**
* Created by Jiqing on 2016/10/26.
*/
public interface AbstractCommand {
public void execute();
}

2.命令接收者电视机

package Command;

/**
* Created by Jiqing on 2016/10/26.
*/
public class Television {
public void open() {
System.out.println("打开电视机");
} public void close() {
System.out.println("关闭电视机");
} public void changeChannel() {
System.out.println("切换电视频道");
}
}

3.具体命令

a.打开命令

package Command;

/**
* Created by Jiqing on 2016/10/26.
*/
public class TVOpenCommand implements AbstractCommand{
private Television tv;
public TVOpenCommand() {
tv = new Television();
} public void execute() {
tv.open();
}
}

b.关闭命令

package Command;

/**
* Created by Jiqing on 2016/10/26.
*/
public class TVCloseCommand implements AbstractCommand{
private Television tv;
public TVCloseCommand() {
tv = new Television();
} public void execute() {
tv.close();
}
}

c.更改频道命令

package Command;

/**
* Created by Jiqing on 2016/10/26.
*/
public class TVChangeCommand implements AbstractCommand{
private Television tv;
public TVChangeCommand() {
tv = new Television();
} public void execute() {
tv.changeChannel();
}
}

4.命令发布者控制者,人

package Command;

/**
* Created by Jiqing on 2016/10/26.
*/
public class Controller {
private AbstractCommand openCommand,closeCommand,changeCommand;
public Controller(AbstractCommand openCommand,AbstractCommand closeCommand,AbstractCommand changeCommand) {
this.openCommand = openCommand;
this.closeCommand = closeCommand;
this.changeCommand = changeCommand;
} public void open() {
openCommand.execute();
} public void change() {
changeCommand.execute();
} public void close() {
closeCommand.execute();
}
}

5.客户端

package Command;

/**
* Created by Jiqing on 2016/10/26.
*/
public class Client {
public static void main(String a[]) {
AbstractCommand openCommand,closeCommand,changeCommand; openCommand = new TVOpenCommand();
closeCommand = new TVCloseCommand();
changeCommand = new TVChangeCommand(); Controller control = new Controller(openCommand,closeCommand,changeCommand); control.open();
control.close();
control.change();
}
}

执行结果:

打开电视机

关闭电视机

切换电视频道

再看一个撤销案例

package Command.Undo;
abstract class AbstractCommand
{
public abstract int execute(int value);
public abstract int undo();
} class ConcreteCommand extends AbstractCommand
{
private Adder adder = new Adder();
private int value; public int execute(int value)
{
this.value=value;
return adder.add(value);
} public int undo()
{
return adder.add(-value);
}
} class CalculatorForm
{
private AbstractCommand command; public void setCommand(AbstractCommand command)
{
this.command=command;
} public void compute(int value)
{
int i = command.execute(value);
System.out.println("执行运算,运算结果为:" + i);
} public void undo()
{
int i = command.undo();
System.out.println("执行撤销,运算结果为:" + i);
}
} class Adder
{
private int num=0; public int add(int value)
{
num+=value;
return num;
}
} class Client
{
public static void main(String args[])
{
CalculatorForm form = new CalculatorForm();
ConcreteCommand command = new ConcreteCommand();
form.setCommand(command); form.compute(10);
form.compute(5);
form.compute(10);
form.undo();
}
}

执行结果:

执行运算,运算结果为:10

执行运算,运算结果为:15

执行运算,运算结果为:25

执行撤销,运算结果为:15

看类图

JAVA设计模式之【命令模式】的更多相关文章

  1. 折腾Java设计模式之命令模式

    博客原文地址 折腾Java设计模式之命令模式 命令模式 wiki上的描述 Encapsulate a request as an object, thereby allowing for the pa ...

  2. Java设计模式 之 命令模式

    1      从属模式分类 行为性模式 2      命令模式意图 命令模式可将动作的请求者和动作的执行者对象中解耦. 该模式将一个行为操作发起者的请求封装到对象中,该请求由另外一个对象执行. 将动作 ...

  3. JAVA设计模式之 命令模式【Command Pattern】

    一.概述 命令模式能够将请求发送者和接收者全然解耦.发送者与接收者之间没有直接引用关系,发送请求的对象仅仅须要知道怎样发送请求,而不必知道怎样完毕请求.核心在于引入了命令类,通过命令类来减少发送者和接 ...

  4. 14.java设计模式之命令模式

    基本需求: 一套智能家电,有照明灯.风扇.冰箱.洗衣机,我们只要在手机上安装app就可以控制对这些家电工作 这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个App分别控制,我们希望只要一个 ...

  5. java设计模式之命令模式

    学校中.生活中.社会中总是会存在一定的阶层,虽然我们很多人都不可认可阶层的存在.命令这一词也就在阶层中诞生.家长命令孩子,老师命令学生,领导命令小娄娄.这些都在我们的生活存在的东西,相信这一个模式学习 ...

  6. java设计模式之命令模式以及在java中作用

    命令模式属于对象的行为模式.命令模式又称为行动(Action)模式或交易(Transaction)模式. 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请 ...

  7. 玉帝传美猴王上天,大闹天宫之Java设计模式:命令模式

    目录 示例 改进代码 命令模式 定义 意图 主要解决问题 何时使用 优缺点 玉帝传美猴王上天 命令模式和策略模式的区别 示例 系统需要设计一个命令行界面,用户可输入命令来执行某项功能,系统的功能会不断 ...

  8. 用Java 8 Lambda表达式实现设计模式:命令模式

    在这篇博客里,我将说明如何在使用 Java 8 Lambda表达式 的函数式编程方式 时实现 命令 设计模式 .命令模式的目标是将请求封装成一个对象,从对客户端的不同类型请求,例如队列或日志请求参数化 ...

  9. 折腾Java设计模式之状态模式

    原文地址 折腾Java设计模式之状态模式 状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式.在状态模式中,我们创建表示各种状态的对象 ...

  10. Java设计模式——装饰者模式

    JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...

随机推荐

  1. NFS的搭建(sudo apt-get install nfs-kernel-server),TFTP服务器(sudo apt-get install tftpd-hpa tftp-hpa)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Osean_li/article/details/53240705 ***************** ...

  2. h5-列表

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAX4AAAInCAIAAAAQ0aUJAAAgAElEQVR4nOy9eVxb153wnZk+z/t53n ...

  3. poj--3207--Ikki's Story IV - Panda's Trick(2-sat)

    Ikki's Story IV - Panda's Trick Time Limit: 1000MS   Memory Limit: 131072KB   64bit IO Format: %I64d ...

  4. webstorm配置Monokai-Sublime.jar主题

    https://github.com/OtaK/jetbrains-monokai-sublime 导入下载的Monokai-Sublime.jar jar包即可使用.

  5. 8. String to Integer[M]字符串转整数

    题目 Inplement atoi which converts a string to an integer. The function first discards as many whitesp ...

  6. Spring mvc 实现jsonp和json数据类型

            在使用springmvc开发rest接口的时候很方便,可以直接使用@ResponseBody注解,直接加在springmvc的控制器类的方法上,springmvc会直接为我们将返回的对 ...

  7. ffmpeg x264编译与使用介绍

    问题1:我用的是最新版本的ffmpeg和x264,刚刚编译出来,编译没有问题,但是在linux 环境使用ffmpeg的库时发现报错error C3861: 'UINT64_C': identifier ...

  8. Oracle PL/SQL开发基础(第三十三弹:EXCEPTION_INIT)

    如果有一些异常并没有异常名称,比如一些ORA-开头的异常并没有一个友好的预定义的异常定义,此时在WHEN子句中无法使用具体的异常名称,必须要使用OTHERS异常处理器进行捕捉.通过EXCEPTION_ ...

  9. ScSPM & LLC

    为啥会有SPM→ScSPM呢?原因之一是为了寻找better coding + better pooling的方式提高性能,原因之二就是提高速度.如何提高速度?这里的速度,不是Coding+Pooli ...

  10. Reflection (computer programming) -反射-自身结构信息

    n computer science, reflection is the ability of a computer program to examine, introspect, and modi ...