设计模式 - 命令模式(command pattern) 具体解释
命令模式(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) 具体解释的更多相关文章
- 设计模式 - 命令模式(command pattern) 多命令 具体解释
命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...
- 设计模式 - 命令模式(command pattern) 宏命令(macro command) 具体解释
命令模式(command pattern) 宏命令(macro command) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考: 命名模式(撤销) ...
- 设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释
命令模式(command pattern) 撤销(undo) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.cs ...
- C#设计模式——命令模式(Command Pattern)
一.概述通常来说,“行为请求者”与“行为实现者”是紧耦合的.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这些情况下,将“行为请求者”与“行为实 ...
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...
- 二十四种设计模式:命令模式(Command Pattern)
命令模式(Command Pattern) 介绍将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可取消的操作. 示例有一个Message实体类,某个 ...
- 设计模式-15命令模式(Command Pattern)
1.模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使 ...
- 设计模式 - 策略模式(Strategy Pattern) 具体解释
策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全 ...
- 设计模式 - 迭代器模式(iterator pattern) 具体解释
迭代器模式(iterator pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一 ...
随机推荐
- AppCanCSS背景图片的属性
最近在用AppCan框架技术做跨平台移动应用开发,碰到界面布局设计中图片平铺.拉伸效果. 我们用到的是CSS 3中Background-size属性. 网上查了下这个属性,小记下: 取值: backg ...
- oracle过滤名字中含有_的行
select * from emp where ename like '%\_%' escape '\'; escape 定义转义字符串,这样转义字符串后的字符就是普通字符.
- 武汉科技大学ACM :1001: 华科版C语言程序设计教程(第二版)课后习题3.12
Problem Description 输入n,输出对应的边长为n的空心正六边形. 为方便看图,样例中点 '.' 表示空格,打印图形时请打印空格而非小圆点. Input 边长n.(n<=20) ...
- JAVA-5-关于for循环的几个例子
打印一个*组成的矩形 public static void main(String[] args) { // TODO 自动生成的方法存根 for (int i = 0; i < 5; i++) ...
- 取消IDEA中光标“指哪打哪”模式
很简单,在Settings->Editor里面去掉Allow placement of caret after end of line
- 函数递归时,递归次数到900多时,就是抛出异常exception RuntimeError('maximum recursion depth exceeded',)
import subprocess import multiprocessing import urllib import sys import os import pymongo import si ...
- xml代码
修改和删除: <?php$doc=new DOMDocument();$doc->load("php.xml");$root=$doc->documentElem ...
- Web之CSS开发技巧: CSS 居中大全
<center> text-align:center 在父容器里水平居中 inline 文字,或 inline 元素 vertical-align:middle 垂直居中 inline 文 ...
- stdarg.h详解
读Linux内核中的vsprintf函数的时候遇到了C语言的可变参数调用,查了挺多资料还是这篇比较详细,而且自己验证了下,确实如此 (一)写一个简单的可变参数的C函数 下面我们来探讨如何写一个简单的 ...
- xampp 命令行修改数据库密码
进入xampp 下 ./mysql -u root -p password 进入mysql控制台 UPDATE mysql.user SET Password=PASSWORD('password') ...