`

深入浅出设计模式六——封装调用(命令模式)

阅读更多

 命令模式:

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。

UML图:

解析UML图:

示例:

现在需要开发一个遥控器的API,当遥控器的某个按钮按下去之后,插座上对应的机器能够操作.如灯亮,风扇转等,但注意了插座对应的设备是可变化的,或者说仍有空余的插座是预留给新设备的.

采用Command模式代码如下:

 

package com.lwf.command;

public interface Command {
	public void excute();
}

 

package com.lwf.command;

public class LineOnCommand implements Command {

	Light light;
	public LineOnCommand(Light light){
		this.light = light;
	}
	public void excute() {
		light.on();
	}

}

 

package com.lwf.command;

public class LineOffCommand implements Command {

	Light light;
	LineOffCommand(Light light){
		this.light = light;
	}
	public void excute() {
		light.off();
	}

}

 

package com.lwf.command;

public class Light {

	public void on(){
		System.out.println("on");
	}

	public void off() {
		System.out.println("off");		
	}
}

 

package com.lwf.command;

public class SimpleRemoteControl {

	Command command;
	public void setCommand(Command command){
		this.command = command;
	}
	
	public void buttonWasPressed(){
		command.excute();
	}
}

 

package com.lwf.command;

public class Client {

	/*
	 * 客户端负责创建command对象并设置接收者light
	 */
	public static void main(String[] args) {
		
		//客户client创建command对象并设置接收者light
		Light light = new Light();
		Command command = new LineOnCommand(light);
		
		//调用者(遥控器)invoker,持有command对象,并设置具体的Command对象.在自己的方法中调用command的excute方法.
		SimpleRemoteControl s = new SimpleRemoteControl();
		s.setCommand(command);
		s.buttonWasPressed();
		
		command = new LineOffCommand(light);
		s.setCommand(command);
		s.buttonWasPressed();
	}
}

 

测试结果:

on

off

分享到:
评论

相关推荐

    深入浅出设计模式四——多区域比萨加盟店生产比萨实现(抽象工厂模式)

    今天我们将深入探讨“抽象工厂模式”(Abstract Factory Pattern),它在“深入浅出设计模式四——多区域比萨加盟店生产比萨实现”中得到了应用。这个模式主要用于创建一系列相关的对象,而无需指定其具体的类。 ...

    深入浅出设计模式中文第一章

    正如本书章标题所示,“深入浅出设计模式”,正是希望通过剖析设计模式背后的原理和实践,帮助读者不仅学会使用模式,更能理解和吸收模式背后的思维逻辑,从而在自己的设计和应用中灵活运用,最终达到“把模式装进...

    深入浅出MFC——侯捷

    ### 深入浅出MFC——侯捷 #### 关键知识点概述 1. **MFC框架介绍**:Microsoft Foundation Classes (MFC),是微软提供的一套基于C++的类库,用于简化Windows应用程序开发过程中的复杂度。MFC封装了许多Windows API...

    深入浅出设计模式之策略模式总结(一)附例子

    设计模式是软件工程中的一种最佳实践,用于解决常见的设计问题并提供可重用的解决方案。在众多设计模式中,策略模式是一种行为模式,它允许在运行时动态选择算法或策略,从而使程序更具灵活性。本篇文章将深入探讨...

    深入浅出话VC++(2)——MFC的本质.pdf

    【深入浅出话VC++(2)——MFC的本质】 MFC,全称为Microsoft Foundation Class Library,是由微软公司为简化Windows平台下的C++应用程序开发而设计的一个类库。MFC将复杂的Windows API封装成C++类,使得程序员可以...

    C#设计模式(电子书).rar

    这本书《C#设计模式》深入浅出地介绍了这些模式,通过实例解析和代码演示,帮助读者掌握如何在实际项目中应用这些模式。无论是初学者还是经验丰富的开发者,都能从中受益,提升自己的编程思维和解决问题的能力。通过...

    vc++ 深入浅出MFC

    **深入浅出MFC——VC++编程核心技术** MFC(Microsoft Foundation Classes)是微软公司为开发者提供的一套基于C++的类库,用于简化Windows应用程序的开发。它封装了Windows API,提供了面向对象的编程接口,让...

    深入浅出MFC---侯捷

    **深入浅出MFC——侯捷** MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于简化Windows应用程序的开发。侯捷先生的《深入浅出MFC》是一本针对MFC深入理解的经典著作,它详尽地介绍了如何使用MFC...

    java设计模式--策略模式

    在HeadFirst的《设计模式》一书中,第一章深入浅出地讲解了这一模式,通过实例帮助读者理解其核心概念和应用场景。 策略模式的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。这些算法...

    李久进的《MFC深入浅出》,不比侯捷的那本差。

    ### MFC深入浅出——李久进著作解析 #### 前言 李久进老师的《MFC深入浅出》是一本深入剖析Microsoft Foundation Classes(MFC)的技术书籍,被誉为是学习MFC不可或缺的经典之作。本书不仅系统地介绍了MFC的核心概念...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    书中介绍了如何利用Struts 2 来解决Web 应用开发中的常见问题,同时还深入浅出地探讨了许多能帮助程序员编写Struts 2 应用程序的技巧,如管理页面导航活动、输入验证、国际化和本地化、对Ajax 的支持,等等。...

    Java实战开发(李兴华)——代码部分

    李兴华是一位知名的Java教育专家,他的教程通常深入浅出,注重实践,适合初学者和有一定经验的开发者提升技能。以下是根据这个压缩包文件名可能包含的一些Java实战开发知识点: 1. **基础语法**:Java的基础语法是...

Global site tag (gtag.js) - Google Analytics