命令模式(command pattern) 详细解释

本文地址: http://blog.csdn.net/caroline_wendy

命令模式(command pattern) : 将请求封装成对象, 以便使用不同的请求\队列\日志来參数化其它对象.

命令模式也能够支持撤销操作.

简单的命令模式的实现:

1. 详细的类, 每个类都有特定的方法:

/**
* @time 2014年6月9日
*/
package command; /**
* @author C.L.Wang
*
*/
public class Light { public Light() {} public void on() {
System.out.println("Light is on");
} public void off() {
System.out.println("Light is off");
} } /**
* @time 2014年6月9日
*/
package command; /**
* @author C.L.Wang
*
*/
public class GarageDoor { public GarageDoor() {} public void up() {
System.out.println("Garage Door is Open");
} public void down() {
System.out.println("Garage Door is Closed");
} public void stop() {
System.out.println("Garage Door is Stopped");
} public void lightOn() {
System.out.println("Garage light is on");
} public void lightOff() {
System.out.println("Garage light is off");
}
}

2. 命令接口, 提供全部命令的接口, 详细命令继承接口, 并实现方法:

/**
* @time 2014年6月9日
*/
package command; /**
* @author C.L.Wang
*
*/
public interface Command {
public void execute();
}

2. 详细的命令实现, 即把详细类的函数, 封装入命令接口:

/**
* @time 2014年6月9日
*/
package command; /**
* @author C.L.Wang
*
*/
public class LightOnCommand implements Command { Light light; public LightOnCommand (Light light) {
this.light = light;
} /* (non-Javadoc)
* @see command.Command#execute()
*/
@Override
public void execute() {
// TODO Auto-generated method stub
light.on();
} } /**
* @time 2014年6月9日
*/
package command; /**
* @author C.L.Wang
*
*/
public class GarageDoorOpenCommand implements Command { GarageDoor garageDoor; public GarageDoorOpenCommand (GarageDoor garageDoor) {
this.garageDoor = garageDoor;
} /* (non-Javadoc)
* @see command.Command#execute()
*/
@Override
public void execute() {
// TODO Auto-generated method stub
garageDoor.up();
} }

3. 接受者, 运行请求, 传入命令參数, 统一运行命令:

/**
* @time 2014年6月9日
*/
package command; /**
* @author C.L.Wang
*
*/
public class SimpleRemoteControl { Command slot; public SimpleRemoteControl() {} public void setCommand(Command command) {
this.slot = command;
} public void buttonWasPressed() {
slot.execute();
}
}

4. 运行类, 新建详细类, 新建详细命令, 把详细命令传入接收者类, 运行统一动作:

/**
* @time 2014年6月9日
*/
package command; /**
* @author C.L.Wang
*
*/
public class RemoteControlTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SimpleRemoteControl remote = new SimpleRemoteControl();
Light light = new Light();
GarageDoor garageDoor = new GarageDoor();
LightOnCommand lightOn = new LightOnCommand(light);
GarageDoorOpenCommand garageOpen =
new GarageDoorOpenCommand(garageDoor); remote.setCommand(lightOn);
remote.buttonWasPressed();
remote.setCommand(garageOpen);
remote.buttonWasPressed(); } }

5. 输出:

Light is on
Garage Door is Open

设计模式 - 命令模式(command pattern) 具体解释的更多相关文章

  1. 设计模式 - 命令模式(command pattern) 多命令 具体解释

    命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...

  2. 设计模式 - 命令模式(command pattern) 宏命令(macro command) 具体解释

    命令模式(command pattern) 宏命令(macro command) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考: 命名模式(撤销) ...

  3. 设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释

    命令模式(command pattern) 撤销(undo) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.cs ...

  4. C#设计模式——命令模式(Command Pattern)

    一.概述通常来说,“行为请求者”与“行为实现者”是紧耦合的.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这些情况下,将“行为请求者”与“行为实 ...

  5. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  6. 二十四种设计模式:命令模式(Command Pattern)

    命令模式(Command Pattern) 介绍将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可取消的操作. 示例有一个Message实体类,某个 ...

  7. 设计模式-15命令模式(Command Pattern)

    1.模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使 ...

  8. 设计模式 - 策略模式(Strategy Pattern) 具体解释

    策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全 ...

  9. 设计模式 - 迭代器模式(iterator pattern) 具体解释

    迭代器模式(iterator pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一 ...

随机推荐

  1. AppCanCSS背景图片的属性

    最近在用AppCan框架技术做跨平台移动应用开发,碰到界面布局设计中图片平铺.拉伸效果. 我们用到的是CSS 3中Background-size属性. 网上查了下这个属性,小记下: 取值: backg ...

  2. oracle过滤名字中含有_的行

    select * from emp where ename like '%\_%' escape '\'; escape 定义转义字符串,这样转义字符串后的字符就是普通字符.

  3. 武汉科技大学ACM :1001: 华科版C语言程序设计教程(第二版)课后习题3.12

    Problem Description 输入n,输出对应的边长为n的空心正六边形. 为方便看图,样例中点 '.' 表示空格,打印图形时请打印空格而非小圆点. Input 边长n.(n<=20) ...

  4. JAVA-5-关于for循环的几个例子

    打印一个*组成的矩形 public static void main(String[] args) { // TODO 自动生成的方法存根 for (int i = 0; i < 5; i++) ...

  5. 取消IDEA中光标“指哪打哪”模式

    很简单,在Settings->Editor里面去掉Allow placement of caret after end of line

  6. 函数递归时,递归次数到900多时,就是抛出异常exception RuntimeError('maximum recursion depth exceeded',)

    import subprocess import multiprocessing import urllib import sys import os import pymongo import si ...

  7. xml代码

    修改和删除: <?php$doc=new DOMDocument();$doc->load("php.xml");$root=$doc->documentElem ...

  8. Web之CSS开发技巧: CSS 居中大全

    <center> text-align:center 在父容器里水平居中 inline 文字,或 inline 元素 vertical-align:middle 垂直居中 inline 文 ...

  9. stdarg.h详解

    读Linux内核中的vsprintf函数的时候遇到了C语言的可变参数调用,查了挺多资料还是这篇比较详细,而且自己验证了下,确实如此 (一)写一个简单的可变参数的C函数  下面我们来探讨如何写一个简单的 ...

  10. xampp 命令行修改数据库密码

    进入xampp 下 ./mysql -u root -p password 进入mysql控制台 UPDATE mysql.user SET Password=PASSWORD('password') ...