浅谈设计模式之命令模式
2016-06-03 10:41
176 查看
命令模式(Command):将一个请求封装成一个对象,从而使你可以用不同的请求对客户端进行参数化,队请求排队或者记录请求的日志,以及支持可撤销的操作。
关于这个命令我们用一个简单的例子来说明,比如键盘的指令,不同的按键按下就会执行不同的命令。在这里我们用键盘按键发出命令,电脑接收这些命令,然后执行不同的操作,也就是完成了一系列的命令指示。
UML图如下:
命令模式的优点总结如下:
1. 它能比较容易地设计一个命令队列
2. 在需要的情况下,可以较容易的将命令记入日志
3. 允许接收请求的一方决定是否否决请求
4. 可以很容易地实现对请求的撤销和重做
5. 容易增加新的具体命令类,当然这个也容易成为它的缺点==
6. 可以把请求一个操作对象与知道怎么执行一个操作的对象分割开,实现解耦。
参考书籍:《大话设计模式》
关于这个命令我们用一个简单的例子来说明,比如键盘的指令,不同的按键按下就会执行不同的命令。在这里我们用键盘按键发出命令,电脑接收这些命令,然后执行不同的操作,也就是完成了一系列的命令指示。
UML图如下:
//声明执行操作的接口 abstract class Command { protected Receiver receiver; public Command(Receiver receiver) { this.receiver = receiver; } abstract public void Execute(); } //知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者,只要它能够实现命令要求实现的相应功能。 class Receiver { public void Action() { Print("执行相关请求"); } } //将一个接受者对象绑定于一个动作,调用接受者相应的操作 class ConcreteCommand : Command { public ConcreteCommand(Receiver receiver):base(receiver){} public override void Excute() { receiver.Action(); } } //要求该命令执行这个请求 class Invoker { Command command; //命令如果有多个的情况,这样也就可以在执行之前撤销命令了 //List<Command> commands = new List<Command>(); public void SetCommond(Command command) { this.command = command; } public void ExecuteCommand() { command.Execute(); } } //测试 static void Main(sting[] args) { Receiver r = new Receiver(); Command c = new ConcreteCommnd(r); Invoker i = new Invoker(); i.SetCommand(c); i.ExecuteCommand(); Console.Read(); }
命令模式的优点总结如下:
1. 它能比较容易地设计一个命令队列
2. 在需要的情况下,可以较容易的将命令记入日志
3. 允许接收请求的一方决定是否否决请求
4. 可以很容易地实现对请求的撤销和重做
5. 容易增加新的具体命令类,当然这个也容易成为它的缺点==
6. 可以把请求一个操作对象与知道怎么执行一个操作的对象分割开,实现解耦。
参考书籍:《大话设计模式》
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C# 设计模式系列教程-建造者模式
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用