17 C#设计模式-命令模式

上传人:nbwa****ajie 文档编号:49474750 上传时间:2018-07-28 格式:PPT 页数:32 大小:2.74MB
返回 下载 相关 举报
17 C#设计模式-命令模式_第1页
第1页 / 共32页
17 C#设计模式-命令模式_第2页
第2页 / 共32页
17 C#设计模式-命令模式_第3页
第3页 / 共32页
17 C#设计模式-命令模式_第4页
第4页 / 共32页
17 C#设计模式-命令模式_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《17 C#设计模式-命令模式》由会员分享,可在线阅读,更多相关《17 C#设计模式-命令模式(32页珍藏版)》请在金锄头文库上搜索。

1、www.ChinaSA.info Design Patterns命令模式刘 伟 (Sunny)weiliu_www.ChinaSA.info 大纲w 命令模式概述w 命令模式的结构与实现w 命令模式的应用实例w 实现命令队列w 记录请求日志w 实现撤销操作w 宏命令w 命令模式的优缺点与适用环境很多软件都能够自定义快捷键www.ChinaSA.info 命令模式概述w 开关与电灯、排气扇示意图www.ChinaSA.info 命令模式概述w 分析现实生活相同的开关可以通过不同的电线来控制不同的电器开关 请求发送者电灯 请求的最终接收者和处理者开关和电灯之间并不存在直接耦合关系,它们通过 电线连

2、接在一起,使用不同的电线可以连接不同的 请求接收者www.ChinaSA.info 命令模式概述w 分析软件开发按钮 请求发送者事件处理类 请求的最终接收者和处理者发送者与接收者之间引入了新的命令对象(类似电 线),将发送者的请求封装在命令对象中,再通过 命令对象来调用接收者的方法相同的按钮可以对应不同的事件处理类www.ChinaSA.info 命令模式概述w 动机将请求发送者和接收者完全解耦发送者与接收者之间没有直接引用关系发送请求的对象只需要知道如何发送请求,而不必知 道如何完成请求www.ChinaSA.info 命令模式概述w 命令模式的定义对象行为型模式命令模式:将一个请请求封装为

3、为一个对对象,从而让你可以用 不同的请求对对客户进户进 行参数化,对请对请 求排队队或者记录请记录请 求 日志,以及支持可撤销销的操作。Command Pattern: Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.www.ChinaSA.info 命令模式概述w 命令模式的定义别名为动作(Action)模式或事务 (Transa

4、ction)模式“用不同的请求对客户进行参数化”“对请求排队”“记录请求日志”“支持可撤销操作”www.ChinaSA.info 命令模式的结构与实现w 命令模式的结构www.ChinaSA.info 命令模式的结构与实现w 命令模式的结构命令模式包含以下4个角色:Command(抽象命令类)ConcreteCommand(具体命令类)Invoker(调用者)Receiver(接收者)www.ChinaSA.info 命令模式的结构与实现w 命令模式的实现命令模式的本质是对请求进行封装一个请求对应于一个命令,将发出命令的责任和执行 命令的责任分开命令模式允许请求的一方和接收的一方独立开来,使

5、得请求的一方不必知道接收请求的一方的接口,更不 必知道请求如何被接收、操作是否被执行、何时被执 行,以及是怎么被执行的www.ChinaSA.info 命令模式的结构与实现w 命令模式的实现典型的抽象命令类代码:abstract class Command public abstract void Execute(); www.ChinaSA.info 命令模式的结构与实现w 命令模式的实现典型的调用者(请求发送者)类代码:class Invoker private Command command;/构造注入public Invoker(Command command)mand=command

6、;public Command Commandget return command; /设值设值 注入set command = value; /业务业务 方法,用于调调用命令类类的方法public void Call()command.Execute(); www.ChinaSA.info 命令模式的结构与实现w 命令模式的实现典型的具体命令类代码:class ConcreteCommand : Command private Receiver receiver; /维维持一个对请对请 求接收者对对象的引用 public override void Execute() receiver.Ac

7、tion();/调调用请请求接收者的业务处业务处 理方法 Action() www.ChinaSA.info 命令模式的结构与实现w 命令模式的实现典型的请求接收者类代码:class Receiver public void Action() /具体操作 www.ChinaSA.info 命令模式的应用实例w 实例说明为了用户使用方便,某系统提供了一系列功能键,用户可以自定义功 能键的功能,例如功能键FunctionButton可以用于退出系统(由 SystemExitClass类来实现 ),也可以用于显示帮助文档(由 DisplayHelpClass类来实现 )。 用户可以通过修改配置文件来

8、改变功能键的用途,现使用命令模式来 设计该 系统,使得功能键类 与功能类之间解耦,可为同一个功能键设 置不同的功能。www.ChinaSA.info 命令模式的应用实例w 实例类图功能键设置结构图www.ChinaSA.info 命令模式的应用实例w 实例代码 (1) FunctionButton:功能键类,充当请求调用者(请求发送者) (2) Command:抽象命令类 (3) ExitCommand:退出命令类,充当具体命令类 (4) HelpCommand:帮助命令类,充当具体命令类 (5) SystemExitClass:退出系统模拟实现类,充当请求接收者 (6) DisplayHel

9、pClass:显示帮助文档模拟实现类,充当请求接收者 (7) 配置文件App.config (8) Program:客户端测试类演示参考代码 (DesignPatternCommandSample)www.ChinaSA.info 命令模式的应用实例w 结果及分析 如果需要更换具体命令类,无须修改源代码,只需修改配置文件 ,完全符合开闭原则 每一个具体命令类对应一个请求的处理者(接收者),通过向请 求发送者注入不同的具体命令对象可以使相同的发送者对应不同 的接收者,从而实现“将一个请求封装为一个对象,用不同的请求 对客户进行参数化”,客户端只需要将具体命令对象作为参数注入 请求发送者,无须直接

10、操作请求的接收者www.ChinaSA.info 实现命令队列w 动机当一个请求发送者发送一个请求时,有不止一个请求 接收者产生响应,这些请求接收者将逐个执行业务方 法,完成对请求的处理增加一个CommandQueue类,由该类负责存储多个 命令对象,而不同的命令对象可以对应不同的请求接 收者批处理www.ChinaSA.info 实现命令队列w 实现using System.Collections.Generic; namespace CommandSample class CommandQueue/定义义一个List来存储储命令队队列private List commands = new

11、List();public void AddCommand(Command command)commands.Add(command);public void RemoveCommand(Command command)commands.Remove(command);/循环调环调 用每一个命令对对象的Execute()方法public void Execute() foreach (object command in commands) (Command)command).Execute(); www.ChinaSA.info 记录请求日志w 动机将请求的历史记录保存下来,通常以日志文件(L

12、og File)的形式永久存储在计算机中为系统提供一种恢复机制可以用于实现批处理防止因为断电或者系统重启等原因造成请求丢失, 而且可以避免重新发送全部请求时造成某些命令的 重复执行www.ChinaSA.info 记录请求日志w 实现将发送请求的命令对象通过序列化写到日志文件中命令类必须使用属性Serializable标记为可序列化命令对象日志文件序列化www.ChinaSA.info 实现撤销操作w 实例 可以通过对命令类进行修改使得系统支持撤销(Undo)操作和恢复 (Redo)操作设计 一个简易计算器,该计 算器可以实现简单 的数学运算,还可以 对运算实施撤销操作。www.ChinaSA

13、.info 实现撤销操作w 结构简易计算器结构图www.ChinaSA.info 实现撤销操作w 实现加法类:Adder(请求接收者)抽象命令类:AbstractCommand加法命令类:AddCommand(具体命令类)计算器界面类:CalculatorForm(请求发送者)客户端测试类:Program演示参考代码 (DesignPatternCommandUndoSample)www.ChinaSA.info 宏命令w 动机 宏命令(Macro Command)又称为组合命令(Composite Command),它是组合模式和命令模式联用的产物 宏命令是一个具体命令类,它拥有一个集合,在

14、该集合中包含了 对其他命令对象的引用 当调用宏命令的Execute()方法时,将递归调用它所包含的每个 成员命令的Execute()方法。一个宏命令的成员可以是简单命令 ,还可以继续是宏命令 执行一个宏命令将触发多个具体命令的执行,从而实现对命令的 批处理www.ChinaSA.info 宏命令w 结构www.ChinaSA.info 命令模式的优缺点与适用环境w 模式优点降低了系统的耦合度新的命令可以很容易地加入到系统中 ,符合开闭原则可以比较容易地设计一个命令队列或 宏命令(组合命令)为请求的撤销(Undo)和恢复(Redo) 操作提供了一种设计和实现方案www.ChinaSA.info 命令模式的优缺点与适用环境w 模式缺点使用命令模式可能会导致某些系统有过 多的具体命令类(针对每一个对请求接 收者的调用操作都需要设计一个具体命 令类)www.ChinaSA.info 命令模式的优缺点与适用环境w 模式适用环境系统需要将请求调用者和请求接收者解 耦,使得调用者和接收者不直接交互系统需要在不同的时间指定请求、将请 求排队和执行请求系统需要支持命令的撤销(Undo)操作和 恢复(Redo)操作系统需要将一组操作组合在一起形成宏 命令www.ChinaSA.info ENDEND

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号