`

易学设计模式四 命令模式(Commond)

阅读更多
命令模式定义
        将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。





命令模式有4个角色,一个

Command:声明执行操作的接口。
ConcreteCommand:将一个接收者对象邦定于一个动作。调用者收者相应的操作,以实现Execute。
Invoker(Dealer):要求该命令执行这个请求。
Receiver(Light):知道如何实施与执行一个请求相关的操作,任何类都可能是一个接收者。

命令接口
public interface Commond {
	public void execute();
	public void undo();
}

开灯命令
public class LightOnCommond implements Commond {

	private Light light;
	
	public LightOnCommond(Light light) {
		this.light = light;
	}
	
	public void execute() {
		light.on();
	}
	public void undo() {
		light.off();
	}
}

关灯命令
public class LightOffCommond implements Commond {
	
	private Light light;
	
	public LightOffCommond(Light light) {
		this.light = light;
	}
	
	public void execute() {
		light.off();
	}

	public void undo() {
		light.on();
	}
}

接受命令者 是灯
public class Light {
	
	private String state;
	
	public Light() {
		state = "Off";
	}
	
	public void on() {
		System.out.println("Turn the light on");
		state = "On";
	}
	
	public void off() {
		System.out.println("Turn the light off");
		state="off";
	}
	
	public String getState() {
		return state;
	}

}

触发命令者,相当于人 , 开关灯
public class Dealer {
	
	private Vector v;
	
	public Dealer() {
		v = new Vector();
	}
	
	public void deal(Commond cmd) {
		v.addElement(cmd);
		cmd.execute();
	}
	
	public void unDeal() {
		if(v.size() > 0) {
			Commond cmd = (Commond)v.get(v.size()-1);
			cmd.undo();
			v.remove(v.size()-1);
		} 
	}
}


测试类
public class Client {

	public static void main(String[] args) {
		
		Light light = new Light();
		Dealer dealer = new Dealer();
		Commond onCmd = new LightOnCommond(light);
		dealer.deal(onCmd);
		
		Commond offCmd = new LightOffCommond(light);
		dealer.deal(offCmd);

		dealer.unDeal();

	}

}


输出结果
Turn the light on
Turn the light off
Turn the light on
  • 大小: 40.6 KB
分享到:
评论
2 楼 焦志广 2012-09-01  
xhh_lite 写道
怎么少了一个类?


恩?不少啊,少那个类啊;
1 楼 xhh_lite 2012-09-01  
怎么少了一个类?

相关推荐

    Office补丁解决“由于控件不能创建,不能退出设计模式”

    打开stm32的时钟配置STM32F4xx_Clock_Configuration_V1.1.0.xls文件,提示不能创建label1,不能退出设计模式,无法使用时钟配置功能,后发现是office补丁问题,安装后解决。附件为office2007和office2010对应补丁。

    23种java版设计模式源码案例.zip

    命令模式(commond) 解释器模式(interpreter) 迭代器模式(iterator) 中介者模式(mediator) 备忘录模式(memento) 观察者模式(observer) 状态模式(state) 空对象模式(null object) 策略模式(strategy) 模板模式...

    commond.controller

    commond.controller

    超市管理系统java源码swing-king-design:23种java设计模式

    命令模式(commond) 解释器模式(interpreter) 迭代器模式(iterator) 中介者模式(mediator) 备忘录模式(memento) 观察者模式(observer) 状态模式(state) 空对象模式(null object) 策略模式(strategy) 模板模式...

    git_command.zip_git_git command_git commd_git commond_git命令

    标题中的“git_command.zip”显然包含了关于Git命令的资料,而描述进一步确认了这一点,指出这些命令是用于管理代码仓库的。标签再次强调了“git_command”及其不同拼写变体,以及“git命令”。考虑到压缩包内的唯一...

    Linux_commond_help.rar_Help!_Linux commond help

    9. `grep`:在文件中搜索特定的模式。 10. `find`:在指定目录下查找文件。 11. `cat`:查看或合并文件内容。 12. `more`/`less`:分页查看文件内容。 13. `sudo`:以管理员权限执行命令。 14. `vi/vim`/`nano`:...

    vi-commond.rar_vi

    VI有三种主要模式:命令模式、插入模式和底行模式。 1. **命令模式**:在此模式下,你可以移动光标、删除文本、复制和粘贴等。 2. **插入模式**:按`i`、`a`、`o`等键进入,此时可以直接在光标位置输入文本。 3. **...

    Linux_commond.rar_linux_linux commond_tcl

    12. **grep**:在文件中搜索特定模式,用于数据查找和过滤。 13. **find**:根据条件在文件系统中查找文件。 14. **which**:找出命令的完整路径,通常用于确认命令的来源。 15. **man**:查看命令的手册页,获取...

    tar zip unzip command not found(未找到命令).docx

    当你在Red Hat 8.0中遇到“command not found”(未找到命令)的错误时,通常意味着这些工具尚未安装或者环境变量配置不正确。下面我们将详细解释如何解决这个问题。 首先,我们需要配置本地YUM源。在Red Hat 8.0中...

    VS2010SP1 commond line compiler

    A commond line compiler extracted from VS2010SP1, no IDE

    JAVA调用DOS命令.pdf

    JAVA 调用 DOS 命令 JAVA 调用 DOS 命令是指在 JAVA 程序中执行 DOS 命令,实现了 JAVA 程序与 DOS 命令的交互。这种交互可以实现多种功能,如获取 DOS 命令的标准输出和错误输出、阻塞当前 JAVA 线程直到命令执行...

    linuxdb2commond[收集].pdf

    异步模式可避免长时间等待。 6. **数据库备份与恢复** - **备份数据库**: `db2 force application all db2 backup db o_yd to d:` 或 `db2 backup db o_yd to \\.\tape0` 备份是保护数据免受意外丢失的关键措施...

    基于XCode开发Commond Line Tools

    ### 基于XCode开发Command Line Tools #### 概述 在现代软件开发中,命令行工具(Command Line Tools)扮演着极其重要的角色。它们不仅简化了开发流程中的复杂操作,还为开发者提供了强大的自动化处理能力。...

    Linux命令搜索工具linux-command.zip

    Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。   Linux命令分类 这里存放Linux 命令大全并不全,你可以通过linux-command来搜索,它是把 command 目录里面搜集的...

    oracle_commond.rar_odbc api_oracle_oracle 客户端_oracle sql_sql

    综上所述,"oracle_commond.rar"这个压缩包文件提供了Oracle数据库操作的重要参考资料,包括ODBC的使用、Oracle客户端工具的介绍、Oracle SQL的命令集以及可能的数据库管理实践。对于Oracle数据库管理员和开发者来说...

    Build编译工具学习笔记:常用命令参数和BRF文件

    包括:a.d b.d final.brf 和3.04版本的 build程序,帮助文档 博文链接:https://sofire.iteye.com/blog/111460

    hadoop-commond(hadoop.dll)各个版本.rar

    它的设计目标是让存储和处理海量数据变得高效、可靠且可扩展。在Windows系统中,Hadoop的某些功能可能需要特定版本的`hadoop.dll`动态链接库文件来支持。这个压缩包文件“hadoop-commond(hadoop.dll)各个版本.rar”...

    c# UDP心跳程序

    这是我初学c#时做的一个UDP心跳程序,可以从本地指定端口向目标主机的指定端口发送心跳信息,代码很简单

    使用Command执行数据库命令

    使用Command执行数据库命令讲稿PPT,适合新手学习

Global site tag (gtag.js) - Google Analytics