设计模式 - 命令模式(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) : 提供一 ...
随机推荐
- SVN版本日志对话框命令使用指南
日志使用指南 http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-dug-showlog.html
- 连接、关联、JOIN、APPLY(SQL Server)
连接方式 连接类型 个人总结 阐述(生成两个集合的约束笛卡儿积) INNER JOIN 内连接 关联相同的(用于查找关联的信息) FROM C AS c INNER JOIN D AS d ON ...
- eclipse提交hadoop集群跑程序
在eclipse下搭建hadoop后,测试wordcount程序,右击 Run on hadoop 程序跑成功后,发现“INFO - Job job_local401325246_0001 compl ...
- Secure CRT 如何连接虚拟机里面的CentOS系统 当主机没有网的时候 作者原创 欢迎转载
当家里没有网络的时候: 1.第一步:首先保证主机所有的网卡都没有分享连接给VM8这一块网卡 如图:这个设置就保证了无线网络连接这块网卡没有分享给VM8这一块网卡 第二步:启用VM8这一块网卡,右键en ...
- token验证 sae
在微信平台中修改服务器设置时,使用微信Demo的php,刚开始一直验证token 失败 解决办法 :在echo $echoStr;之前添加header('content-type:text');一句这 ...
- Thinkphp 空操作、空控制器、命名空间
1.空操作 空操作是指系统在找不到请求的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化. http://网址/index.php/Hom ...
- 通过SERVICES的方式往商品列表FINDER加入多个ACTION
类似这样的效果: 首先我们需要在自己的app下的services.xml加入一个service: <!-- b2c商品信息 扩展actions --> <service id=&qu ...
- 函数式编程做用户登陆注册练习-pycharm上
def login(username,password): """ 用户登陆 :param username: 用户名 :param password:密码 :retur ...
- Django新手图文教程
Django新手图文教程 本文面向:有python基础,刚接触web框架的初学者. 环境:windows7 python3.5.1 pycharm专业版 Django 1.10版 pip3 一 ...
- HDU_2047——EOF字符串排序排列问题,递推
Problem Description 今年的ACM暑期集训队一共有18人,分为6支队伍.其中有一个叫做EOF的队伍,由04级的阿牛.XC以及05级的COY组成.在共同的集训生活中,大家建立了深厚的友 ...