### 命令模式
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。(摘抄)
命令模式我感觉结合代码来讲会比较好讲,所以我先写代码把
~~~
import java.util.ArrayList;
import java.util.List;
//Action类,执行具体的操作
public class Action
{
void actionA()
{
System.out.println("A");
}
void actionB()
{
System.out.println("B");
}
}
//Command类,用来声明执行操作的接口
public abstract class Command
{
Action action;
public Command(Action action)
{
this.action = action;
}
public abstract void execute();
}
public class ConcreteCommandA extends Command
{
public ConcreteCommandA(Action action)
{
super(action);
}
@Override
public void execute() {
// TODO Auto-generated method stub
action.actionA();
}
}
public class ConcreteCommandB extends Command
{
public ConcreteCommandB(Action action)
{
super(action);
}
@Override
public void execute() {
// TODO Auto-generated method stub
action.actionB();
}
}
//Invoker类,要求该命令执行这个操作
public class Invoker
{
private List<Command> commands = new ArrayList<Command>();
//在add和delete方法中可以执行排队请求和记录日志和否决请求操作
public void addCommand(Command command)
{
commands.add(command);
}
public void deleteCommand(Command command)
{
commands.remove(command);
}
public void executeCommand()
{
for (Command command : commands)
{
command.execute();
}
}
}
class Client
{
public static void main()
{
Action action = new Action();
Command aCommand = new ConcreteCommandA(action);
Command bCommand = new ConcreteCommandB(action);
Invoker invoker = new Invoker();
invoker.addCommand(aCommand);
invoker.addCommand(bCommand);
invoker.deleteCommand(aCommand);
invoker.executeCommand();
}
}
~~~
一个命令模式的模板差不多就是这样了,从这个模板可以很清晰的看出来要添加新的命令也十分容易,删除也很容易,添加新的命令类,更是这里的一大亮点,当你需要一个ConcreteCommandC来同时执行actionA和actinoB那么新建一个ConcreteCommandC类就可以了,在execute方法中,添加这两个方法的执行就ok,对于设计模式的一些原则运用得十分到位。
命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分隔开了。(摘抄)
### 命令模式的作用
1.它能较容易地设计一个命令队列。
2.在需要的情况下,可以较容易地将命令记入日志。
3.允许接受请求的一方决定是否要否决请求。
4.可以容易的实现对请求的撤销和重做。
5.由于加进新的具体命令类不影响其他的类,因此添加新的具体命令类很容易。
(摘抄)
### 注意
敏捷开发原则告诉我们,不要为代码添加基于猜测的,实际不需要的功能。如果不清楚一个系统是否需要命令模式,一般就不要急着去实现它,事实上,在需要的时候通过重构实现这个模式并不困难,只有在真正需要如撤销/恢复操作等功能时,把原来的代码重构为命令模式才有意义。(摘抄)
- 前言
- (1)代码无错就是优?——简单工厂模式
- (2)商场促销——策略模式
- (3)&amp;(4)&amp;(5) 设计模式原则
- (6)穿什么有这么重要?——装饰模式
- (7)为别人做嫁衣——代理模式
- (8)雷锋依然在人间——工厂方法模式
- (9)简历复印——原型模式
- (10)考题抄错会做也白搭——模板方法模式
- (11)迪米特法则
- (12)牛市股票还会亏钱?—— 外观模式
- (13)好菜每回味不同——建造者模式
- (14)老板回来,我不知道——观察者模式
- java实现事件委托
- (15)就不能不还DB吗?—— 抽象工厂模式
- (16)无尽加班何时休息——状态模式
- (17)在NBA我需要翻译——适配器模式
- (18)如果再回到从前——备忘录模式
- (19)分公司=部门——组合设计模式
- (20)想走?可以!先买票——迭代器模式
- (21)有些类也需计划生育——单例模式
- (22)手机软件何时统一——桥接模式
- (23)烤羊肉串引来的思考——命令模式
- (24)加薪非要老总批?——职责链模式
- (25)世界需要和平——中介者模式
- (26)项目多也别傻做——享元模式
- (28)男人和女人——访问者模式