`
wangwengcn
  • 浏览: 175551 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

9.命令模式(Command Pattern)

 
阅读更多

1.定义

将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
命令模式属于行为模式。

 

2.命令模式的使用场景

只要我们认为是命令的地方就可以采用命令模式,比如在GUI开发中,一个按钮的点击是一个命令;触发-反馈机制的处理等。

 

3.命令模式的三个角色

  • Receive接收者角色:该角色就是干活的角色,命令传递到这里是应该被执行的。
  • Command命令角色:需要执行所有命令都在这里声明
  • Invoker调用者角色:接收到命令,并执行命令

4.命令模式的通用代码

 

package _9CommandPattern;

public abstract class Receiver {

	// 抽象接收者,定义每个接收者都必选完成的业务
	public abstract void doSomething();
}
 
package _9CommandPattern;

public class ConcreteReceiver extends Receiver {

	@Override
	public void doSomething() {
		// 每个接收者都必须处理一定的业务逻辑
		System.out.println("我在做好事");
	}

}
 
package _9CommandPattern;

public abstract class Command {

	// 抽象命令,每个命令都必须有一个执行命令的方法
	public abstract void execute();
}
 
package _9CommandPattern;

// 实体命令类
public class ConcreteCommand extends Command {

	private Receiver receiver;
	
	public ConcreteCommand(Receiver receiver)
	{
		this.receiver = receiver;
	}
	
	@Override
	public void execute() {
		receiver.doSomething();
	}

}
 
package _9CommandPattern;

// 调用者
public class Invoker {

	public void action(Command command) 
	{
		command.execute();
	}
}
 
package _9CommandPattern;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Command command = new ConcreteCommand(new ConcreteReceiver());
		new Invoker().action(command);
	}

}

 

5.命令模式的优点

  • 类间解耦:调用者与接受者角色之间没有任何依赖,调用者实现功能时只需调用Commond抽象类的execute方法就可以,不需要了解到底哪个接收者执行
  • 可扩展性:Command的子类非常容易扩展,而调用者Invoker和高层次的模块Client不产生严重的代码耦合
  • 命令模式结合其他模式会更优秀:命令模式可以结合责任链模式,实现命令族解析任务;结合模板方法模式,则可以减少Command子类的膨胀问题

6.命令模式的缺点

请看Command类,如果有N个命令,问题就出来了,Command的子类就可不是几个,而是N个,这个类膨胀的非常大,这个就需要在项目中慎重考虑。

分享到:
评论

相关推荐

    命令模式command pattern

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

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

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

    命令模式 Command Pattern

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

    C#设计模式_设计模式_C#_

    命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of ...

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

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

    设计模式代码——c#

    14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of ...

    23种设计模式 (创建型,结构型,行为型)

    命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式...

    命令模式(Command Pattern).rar

    用最简单的例子理解命令模式(Command Pattern) 命令模式的需求源自想通过一个指令(比如这里IControl的Execute方法)来控制多个类的多个方法,包含了几个要素: 1、命令:让类的各种方法抽象成类实现一个接口 2、...

    32种设计模式

    命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) ...

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

    通过命令模式,我们可以轻松地添加新的命令,只需创建新的具体命令类并实现`Command`接口即可。此外,由于命令对象存储了接收者,所以可以很容易地在不同上下文中重用命令,甚至可以在命令执行后撤销操作(通过保存...

    CommandPattern)管理智能家电最终代码共4页

    **命令模式(Command Pattern)详解** 命令模式是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。在这个场景中,我们关注的是如何利用命令模式...

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

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

    CommandPattern)管理智能家电最终代码共4页.pdf.zip

    总结来说,"CommandPattern)管理智能家电最终代码共4页.pdf.zip"提供的示例应该展示了如何利用命令模式来管理和控制智能家电系统,包括命令的创建、执行、撤销以及如何将这些概念融入到实际的软件设计中。...

    PHP设计模式精彩剖析

    设计模式可以帮助开发人员编写可重用、可扩展...6. 命令模式(Command Pattern):将请求封装成对象,使得可以用不同的请求对客户进行参数化。 7. 装饰者模式(Decorator Pattern):动态地给一个对象添加额外的功能。

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

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

    JavaScript设计模式.pdf

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

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN ...

    command 模式的c++实现

    **命令模式(Command Pattern)详解** 命令模式是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。在C++中实现命令模式,可以有效地解耦调用者和...

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

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

    C++面向对象23种设计模式实现源码DesignPattern.zip

    19.命令模式Command则演示了如何利用函数指针(或者在C++11之后的std::function)来实现这一模式。 4. **调停者模式(Mediator Pattern)**:调停者模式用于降低多个对象之间的耦合度,通过一个中介对象协调它们...

Global site tag (gtag.js) - Google Analytics