1.定义
将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
命令模式属于行为模式。
2.命令模式的使用场景
只要我们认为是命令的地方就可以采用命令模式,比如在GUI开发中,一个按钮的点击是一个命令;触发-反馈机制的处理等。
3.命令模式的三个角色
- Receive接收者角色:该角色就是干活的角色,命令传递到这里是应该被执行的。
- Command命令角色:需要执行所有命令都在这里声明
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个,这个类膨胀的非常大,这个就需要在项目中慎重考虑。
分享到:
相关推荐
用java实现命令模式。展现命令模式类与类之间的继承,依赖关系。
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of ...
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式...
14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of ...
命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式...
用最简单的例子理解命令模式(Command Pattern) 命令模式的需求源自想通过一个指令(比如这里IControl的Execute方法)来控制多个类的多个方法,包含了几个要素: 1、命令:让类的各种方法抽象成类实现一个接口 2、...
Head First 设计模式 (六) 命令模式(Command pattern) C++实现
命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) ...
命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf
设计模式可以帮助开发人员编写可重用、可扩展...6. 命令模式(Command Pattern):将请求封装成对象,使得可以用不同的请求对客户进行参数化。 7. 装饰者模式(Decorator Pattern):动态地给一个对象添加额外的功能。
12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN ...
主要介绍了C#命令模式(Command Pattern),以实例的形式讲述了命令模式通过一个指令来控制多个类的多个方法,需要的朋友可以参考下
命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式...
第 12 章 命令模式【COMMAND PATTERN】 ............................................................................................. 112 第 13 章 装饰模式【DECORATOR PATTERN】 .............................
14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain...
工厂方法模式(Factory Method Pattern) 观察者模式(Observer Pattern) 建造者模式(Builder Pattern) 解释器模式(Interpreter Pattern) 命令模式(Command Pattern) 模板方法模式(Template Method Pattern) 桥接模式...
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种...[GOF《设计模式》]Command模式结构图如下:图1Command模式结构图Command模式将一个请求封装为一个对象,从而使你可以使用不同的请求对客户进行参数化。
策略模式【STRATEGY PATTERN】 代理模式【PROXY PATTERN】 ...命令模式【COMMAND PATTERN】 装饰模式【DECORATOR PATTERN】 迭代器模式【ITERATOR PATTERN】 组合模式【COMPOSITE PATTERN】 ......