C#设计模式——命令模式(Command Pattern)
一、概述
通常来说,“行为请求者”与“行为实现者”是紧耦合的。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这些情况下,将“行为请求者”与“行为实现者”解耦,实现二者之间的松耦合就至关重要。命令模式是解决这类问题的一个比较好的方法。
二、命令模式
命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
命令模式的结构图如下
aaarticlea/png;base64,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" alt="" />
Command定义了命令的接口
ConcreteCommand实现Command接口,定义了具体的命令
Client用于创建具体的命令并设定接收者
Invoker要求Command执行相应的请求
Receiver实施与执行一个请求,任何一个类都可能作为Receiver。
三、示例
假定要实现一个绘图系统,要求支持撤销功能,下面就用命令模式来实现这一需求。
首先定义一个抽象的命令接口
1 publicinterface IGraphCommand
2 {
3 void Draw();
4 void Undo();
5 }
接着实现具体的绘图命令

publicclass Line : IGraphCommand
{
private Point startPoint;
private Point endPoint;
public Line(Point start, Point end)
{
startPoint = start;
endPoint = end;
} publicvoid Draw()
{
Console.WriteLine("Draw Line:{0} To {1}", startPoint.ToString(), endPoint.ToString());
} publicvoid Undo()
{
Console.WriteLine("Erase Line:{0} To {1}", startPoint.ToString(), endPoint.ToString());
}
} publicclass Rectangle : IGraphCommand
{
private Point topLeftPoint;
private Point bottomRightPoint;
public Rectangle(Point topLeft, Point bottomRight)
{
topLeftPoint = topLeft;
bottomRightPoint = bottomRight;
} publicvoid Draw()
{
Console.WriteLine("Draw Rectangle: Top Left Point {0}, Bottom Right Point {1}", topLeftPoint.ToString(), bottomRightPoint.ToString());
} publicvoid Undo()
{
Console.WriteLine("Erase Rectangle: Top Left Point {0}, Bottom Right Point {1}", topLeftPoint.ToString(), bottomRightPoint.ToString());
}
} publicclass Circle : IGraphCommand
{
private Point centerPoint;
privateint radius;
public Circle(Point center, int radius)
{
centerPoint = center;
this.radius = radius;
} publicvoid Draw()
{
Console.WriteLine("Draw Circle: Center Point {0}, Radius {1}", centerPoint.ToString(), radius.ToString());
} publicvoid Undo()
{
Console.WriteLine("Erase Circle: Center Point {0}, Radius {1}", centerPoint.ToString(), radius.ToString());
}
}

然后再定义绘图类作为命令接收者

1 publicclass Graphics
2 {
3 Stack<IGraphCommand> commands =new Stack<IGraphCommand>();
4
5 publicvoid Draw(IGraphCommand command)
6 {
7 command.Draw();
8 commands.Push(command);
9 }
10
11 publicvoid Undo()
12 {
13 IGraphCommand command = commands.Pop();
14 command.Undo();
15 }
16 }

最后看一下如何调用

1 staticvoid Main(string[] args)
2 {
3 Line line =new Line(new Point(10, 10), new Point(100, 10));
4 Rectangle rectangle =new Rectangle(new Point(20, 20), new Point(50, 30));
5 Circle circle =new Circle(new Point(500, 500), 200);
6
7 Graphics graphics =new Graphics();
8 graphics.Draw(line);
9 graphics.Draw(rectangle);
10 graphics.Undo();
11 graphics.Draw(circle);
12
13 Console.ReadLine();
14 }

C#设计模式——命令模式(Command Pattern)的更多相关文章
- 设计模式 - 命令模式(command pattern) 多命令 具体解释
命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...
- 设计模式 - 命令模式(command pattern) 具体解释
命令模式(command pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 命令模式(command pattern) : 将请求封装成对 ...
- 设计模式 - 命令模式(command pattern) 宏命令(macro command) 具体解释
命令模式(command pattern) 宏命令(macro command) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考: 命名模式(撤销) ...
- 设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释
命令模式(command pattern) 撤销(undo) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.cs ...
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...
- 二十四种设计模式:命令模式(Command Pattern)
命令模式(Command Pattern) 介绍将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可取消的操作. 示例有一个Message实体类,某个 ...
- 设计模式-15命令模式(Command Pattern)
1.模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使 ...
- 设计模式----行为型模式之命令模式(Command Pattern)
下面来自head first设计模式的命令模式一章节. 定义 将"请求"封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作. 类图 注: 1. ...
- 设计模式(六):控制台中的“命令模式”(Command Pattern)
今天的博客中就来系统的整理一下“命令模式”.说到命令模式,我就想起了控制台(Console)中的命令.无论是Windows操作系统(cmd.exe)还是Linux操作系统(命令行式shell(Comm ...
随机推荐
- pgpgin|pgpgout|pswpin|pswpout意义与差异
引用来自: http://ssms.cs2c.com.cn/otrs/pc.pl?Action=PublicFAQZoom;ItemID=11741 文章主要意思是: 1. page in/out操作 ...
- IOS中的多线程之GCD
在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下CDD的使用. GCD(Grand Central D ...
- 动态生成Table内文字换行。
后台动态生成table,并把td内的文字进行换行. 前台: <body style="width:100%;height:540px;margin-left:0px;margin-to ...
- HDU 4686 Arc of Dream (矩阵快速幂)
Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ...
- Swift中的Void类型与空元祖表达式
可能有不少Swift开发者会忽略这么一个细节:在Swift中,Void类型其实是一个别名类型,而其真正的类型为(),即一个空元祖(empty tuple)! 这种语言特性给Swift带来了一些比较方便 ...
- Myeclipse 2015 stable 1.0 完美破解方法(转自 http://yangl.net/2015/07/14/myeclipse_2015stable_1/)
Myeclipse 2015 stable 1.0 完美破解方法 http://yangl.net/2015/07/14/myeclipse_2015stable_1/ 破解包(注册机)下载地址:链接 ...
- volley中图片加载
volley图片加载有三种方式: 记得:Volley中已经实现了磁盘缓存了,查看源码得知通过 context.getCacheDir()获取到了 /data/data/<application ...
- Java Bytecode Instructions List
monic Opcode(in hex) Other bytes Stack[before]→[after] Description aaload 32 arrayref, index → val ...
- 现代JavaScript开发者的工具箱
自从HTML5变得流行以来,整个Web平台取得了长足的进步,人们也开始将JavaScript视为一门能够创建复杂应用的语言.许多新的API纷纷浮现,而关于浏览器如何应用这些技术的文章也大量涌现. 作为 ...
- 理解RxJava:(三)RxJava的优点
理解RxJava:(三)RxJava的优点 在第一部分,讲解了RxJava的基本结构.在第二部分,展示了operators的强大之处.但是你们可能仍然没有被说服,也没有足够的理由信服.下面是一些能让你 ...