Command Pattern(命令模式)
定义:
将一个请求封装成一个对象,因此可以参数化多个客户的不同请求,将请求排队,记录请求日志,并且支持撤销操作。(来自:《深入浅出设计模式》莫勇腾)
应用情景:
- 当你需要与动作有关的对象来作为参数。
- 你需要在不同的时间创建请求,生成请求队列,执行请求。
- 你需要支持取消、保存修改日志或处理事务(事务包括大量修改的数据)功能。
- 你需要支持宏命令。
前奏
我举个例子,假设天暗下来了,那么通常情况下,我们要开电灯,日光灯,台灯等,假设一盏灯对应一个开关,总共开5盏灯,那么我们要按五个开关,通常情况下,如果灯一多起来,那么人就会感觉很费劲,设计程序时,我们这样设计,人作为一个打开开关的类,每一盏灯作为一个类,那么通常我们会new 五个灯的类,然后用一个方法turnLightOn()来打开所有的灯,
如下
事实上,如果我们再增加一盏灯的话,Person类必须修改,方法也得修改,而且也会使得Person类越来越庞大,而设计模式的思想告诉我们必须保护起变化来,我们引入一个中间类,Command,把所有的命令放入到里边,如下列UML图:
package lights.lights;
/***********************************************************************
* Module: Person.java
* Author: hongqin
* Purpose: Defines the Class Person
***********************************************************************/
import java.util.*;
/** @pdOid e48e5f4c-fa8c-4d2f-95e9-5739f160120a */
public class Person {
public List<Command> commandList;
public Person() {
commandList = new ArrayList<Command>();
}
public int turnLightOn() {
Command[] commands = (Command[])commandList.toArray();
for (Command command : commands) {
command.execute();
}
return 0;
}
/** @pdGenerated default add
* @param newCommand */
public void addCommand(Command newCommand) {
if (!this.commandList.contains(newCommand))
this.commandList.add(newCommand);
}
/** @pdGenerated default remove
* @param oldCommand */
public void removeCommand(Command oldCommand) {
if (oldCommand == null)
return;
if (this.commandList != null)
if (this.commandList.contains(oldCommand))
this.commandList.remove(oldCommand);
}
}
实例:
注:司机不必关注加速的细节,只需要发出一个命令即可实现加减速。命令可以是连续的(队列操作),重复的,可撤销的操作。
注:
- 定义以及应用场景来自《深入浅出设计模式》莫勇腾
- UML软件:PowerDesigner12.5
- 大小: 7.8 KB
- 大小: 3.8 KB
- 大小: 7.6 KB
分享到:
相关推荐
用java实现命令模式。展现命令模式类与类之间的继承,依赖关系。
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
用最简单的例子理解命令模式(Command Pattern) 命令模式的需求源自想通过一个指令(比如这里IControl的Execute方法)来控制多个类的多个方法,包含了几个要素: 1、命令:让类的各种方法抽象成类实现一个接口 2、...
Head First 设计模式 (六) 命令模式(Command pattern) C++实现
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf
主要介绍了C#命令模式(Command Pattern),以实例的形式讲述了命令模式通过一个指令来控制多个类的多个方法,需要的朋友可以参考下
工厂方法模式(Factory Method Pattern) 观察者模式(Observer Pattern) 建造者模式(Builder Pattern) 解释器模式(Interpreter Pattern) 命令模式(Command Pattern) 模板方法模式(Template Method Pattern) 桥接模式...
12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN ...
CommandPattern 命令模式 Memento 备忘录模式 行为型模式end 创建型模式start 共五种,我把抽象工厂和工厂模式合在一起了 BuildPattern 建造者模式 Factory 工厂模式 Prototype 原型模式 ...
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种...[GOF《设计模式》]Command模式结构图如下:图1Command模式结构图Command模式将一个请求封装为一个对象,从而使你可以使用不同的请求对客户进行参数化。
命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式...
CommandPattern:在Java中实现命令模式
命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State...
命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of ...
命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern...
命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式...