`

设计模式:命令模式(command Pattern)

阅读更多

命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。

 

我们使用遥控器的例子来说明一下命令模式

1>新建一个Command(命令)接口

 

package com.kaishengit.command;

public interface Command {
	//命令对象方法
	public void execute();
}

 

 2>新建一个遥控器(发出命令对象)类:RemoteControl.java 

 

package com.kaishengit.command;

import java.util.ArrayList;
import java.util.List;

public class RemoteControl {
	
	//用于存放命令
	private List<Command> commandList = new ArrayList<Command>();
	
	/**
	 * 向遥控器中添加命令
	 * @param command
	 */
	public void setCommand(Command command){
		commandList.add(command);
	}
	
	/**
	 * 按下按键执行第几个命令
	 * @param index
	 */
	public void buttonWasPressed(int index){
		commandList.get(index - 1).execute();
	}
}

 

 3>新建两个电器(执行命令对象):电灯类、电视类

 

package com.kaishengit.command;

//1.电灯类
public class Light {
	public void on(){
		System.out.println("灯亮了!");
	}
}

 

 

 

package com.kaishengit.command;

//2.电视类
public class Tv {
	public void on(){
		System.out.println("打开电视!");
	}
}
 

 

 

4>新建两个命令对象类(实现Command接口):控制电灯、控制电视

 

package com.kaishengit.command;
//1.控制电灯
public class LightOnCommand implements Command{

	private Light light;
	
	/**
	 * 传入控制的对象:电灯
	 * @param light
	 */
	public LightOnCommand(Light light){
		this.light = light;
	}
	
	/**
	 * 执行命令:打开灯
	 */
	@Override
	public void execute() {
		light.on();
	}
	
}

 

 

 

package com.kaishengit.command;
//2.控制电视
public class TurnTvCommand implements Command{

	private Tv tv;
	
	public TurnTvCommand (Tv tv){
		this.tv = tv;
	}
	@Override
	public void execute() {
		tv.on();
	}

}
 

 

 5>测试一下

 

package com.kaishengit.command;

public class Test {
	public static void main(String[] args) {
		//创建遥控器
		RemoteControl remoteControl = new RemoteControl();
		//开灯命令
		LightOnCommand lightOnCommand  = new LightOnCommand(new Light());
		//打开电视命令
		TurnTvCommand turnTvCommand = new TurnTvCommand(new Tv());
		
		//将命令捆绑到遥控器上
		remoteControl.setCommand(turnTvCommand);
		remoteControl.setCommand(lightOnCommand);
		
		//按下按钮
		remoteControl.buttonWasPressed(1);//执行第一个命令
		//remoteControl.buttonWasPressed(2);//执行第二个命令
	}
}

 

 执行结果:

---------------------------------

打开电视!

---------------------------------

ok....

 

 

宏命令:是对子命令的结合体,一连串命令。

比如这里,我们创建一个宏命令:先开灯,再开电视

 

1>新建一个宏命令对象(实现Command接口):MacroCommand.java 

 

package com.kaishengit.command;
//宏命令
public class MacroCommand implements Command{

	private Command[] commands;
	
	/**
	 * 传入命令列表
	 * @param commands
	 */
	public MacroCommand(Command...commands){
		this.commands = commands;
	}
	
	/**
	 * 依次执行命令列表中的命令
	 */
	@Override
	public void execute() {
		for(Command command : commands){
			command.execute();
		}
	}
	
}

 2>我们测试一下我们新建的宏命令对象

 

 

package com.kaishengit.command;

public class Test {
	public static void main(String[] args) {
		//创建遥控器
		RemoteControl remoteControl = new RemoteControl();
		
		//开灯命令
		LightOnCommand lightOnCommand  = new LightOnCommand(new Light());
		//开电视命令
		TurnTvCommand turnTvCommand = new TurnTvCommand(new Tv());
		
		//我们创建的宏命令,传入命令列表:1.开灯命令、2.开电视命令
		MacroCommand mc = new MacroCommand(lightOnCommand,turnTvCommand);
		
		//将宏命令捆绑到遥控器上
		remoteControl.setCommand(mc);
	
		//按下按钮,执行宏命令
		remoteControl.buttonWasPressed(1);
	}
}

 

 运行结果:

-------------------

 

灯亮了!

打开电视!

 

-------------------

 

ok。。。

 

 

 

关于命令模式

1.命令模式将发出请求的对象和执行请求的对象解耦

2.在被解耦的两者之间间是通过命令对象进行沟通的,命令对象封装了一个或一组动作

3.调用者通过调用命令对象的execute方法发出请求,这使得接收者对象的劢作被调用

4.宏命令是命令的一种简单延伸,允许调用多个命令

 

 

end....

 

3
7
分享到:
评论

相关推荐

    设计模式之命令模式(Command Pattern)

    命令模式是一种行为设计模式,它将请求封装成独立的对象,使得可以使用不同的请求、队列请求、记录请求历史以及支持可撤销的操作。这种模式在软件工程中被广泛应用,尤其是在需要解耦请求发起者和接收者时,提高了...

    c++-设计模式之命令模式(Command Pattern)

    命令模式(Command Pattern)是一种行为型设计模式,它将请求封装为对象,从而使您可以使用不同的请求、队列请求或日志请求,并支持可撤销操作。命令模式通常用于实现操作的解耦,使得发送者和接收者之间不直接关联...

    设计模式:可复用面向对象软件的基础--详细书签版

     “[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法...

    命令模式command pattern

    命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列请求,或者支持可撤销的操作。在Java中实现命令模式,我们可以利用面向对象编程的特性来构建系统,使得...

    Head First 设计模式 (六) 命令模式(Command pattern) C++实现

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Head First 设计模式这本书中,第六章详细介绍了如何在C++中...

    .NET设计模式(17):命令模式(CommandPattern)

    在软件系统中,“行为请求者”与“行为实现者”通常呈现一种...[GOF《设计模式》]Command模式结构图如下:图1Command模式结构图Command模式将一个请求封装为一个对象,从而使你可以使用不同的请求对客户进行参数化。

    命令模式 Command Pattern

    ### 命令模式(Command Pattern) #### 概述 命令模式是一种行为设计模式,它将请求封装成对象,以便使用不同的请求对客户端进行参数化。该模式有助于将发送请求的对象与执行请求的对象解耦。 #### 核心概念 在...

    C++设计模式课件23_Command_命令模式.pdf

    **命令模式(Command Pattern)**是一种行为型设计模式,它将请求封装成对象,从而使你能够用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。在命令模式中,请求是以命令的形式...

    C++设计模式:基于Qt开源跨平台开发框架

    例如,可以使用命令模式(Command Pattern)封装复杂的用户操作,使回退和重做功能变得简单;使用模板方法模式(Template Method Pattern)定义算法的骨架,让子类实现具体的步骤,实现代码复用。 总结来说,C++...

    设计模式PPT

     命令模式(Command Pattern)  解释器模式(Interpreter Pattern)  迭代器模式(Iterator Pattern)  中介者模式(Mediator Pattern)  备忘录模式(Memento Pattern)  观察者模式(Observer Pattern...

    designPattern6:设计模式:命令模式,命令模式(松耦合版),命令模式(松耦合改进版),

    命令模式包含四个主要角色:命令接口(Command)、具体命令(Concrete Command)、接收者(Receiver)和调用者(Invoker)。命令接口定义了执行操作的接口,具体命令实现该接口,持有接收者并调用其方法来执行特定...

    C++设计模式基础教程.pdf

    14. 命令模式(Command Pattern):将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化。 15. 责任链模式(Chain of Responsibility Pattern):在该模式里,很多对象由每一个对象对其下家的引用...

    java常用设计模式-命令模式

    命令模式(Command Pattern)是一种行为设计模式,它允许将请求封装为一个对象,从而使不同的请求可以使用不同的参数进行参数化,队列或日志请求,以及支持可撤销的操作。在 Java 中,命令模式的实现通常涉及一个...

    JavaScript设计模式.pdf

    10. 命令模式(Command Pattern): 命令模式是对方法调用进行封装的方式。它的主要作用是使方法调用变得更加灵活和可扩展。 11. 职责链模式(Chain of Responsibility Pattern): 职责链模式是用来消除请求的发送...

    Java设计模式之禅

    2. 命令模式(Command Pattern):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。 3. 迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部...

Global site tag (gtag.js) - Google Analytics