首页 17C设计模式-命令模式

17C设计模式-命令模式

举报
开通vip

17C设计模式-命令模式 Design Patterns 命令模式 刘 伟 (Sunny) weiliu_china@126.com 大纲 命令模式概述 命令模式的结构与实现 命令模式的应用实例 实现命令队列 记录请求日志 实现撤销操作 宏命令 命令模式的优缺点与适用环境 很多软件都能够自定义快捷键 命令模式概述 开关与电灯、排气扇示意图 命令模式概述 分析 现实生活 相同的开关可以通过不同的电线来控制不同的电器 开关   请求发送者 电灯   请求的最终接收者和处理...

17C设计模式-命令模式
Design Patterns 命令模式 刘 伟 (Sunny) weiliu_china@126.com 大纲 命令模式概述 命令模式的结构与实现 命令模式的应用实例 实现命令队列 记录请求日志 实现撤销操作 宏命令 命令模式的优缺点与适用环境 很多软件都能够自定义快捷键 命令模式概述 开关与电灯、排气扇示意图 命令模式概述 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 现实生活 相同的开关可以通过不同的电线来控制不同的电器 开关   请求发送者 电灯   请求的最终接收者和处理者 开关和电灯之间并不存在直接耦合关系,它们通过电线连接在一起,使用不同的电线可以连接不同的请求接收者 命令模式概述 分析 软件开发 按钮   请求发送者 事件处理类   请求的最终接收者和处理者 发送者与接收者之间引入了新的命令对象(类似电线),将发送者的请求封装在命令对象中,再通过命令对象来调用接收者的方法 相同的按钮可以对应不同的事件处理类 命令模式概述 动机 将请求发送者和接收者完全解耦 发送者与接收者之间没有直接引用关系 发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求 命令模式概述 命令模式的定义 对象行为型模式 命令模式:将一个请求封装为一个对象,从而让你可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。 Command Pattern: Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations. 命令模式概述 命令模式的定义 别名为动作(Action)模式或事务(Transaction)模式 “用不同的请求对客户进行参数化” “对请求排队” “记录请求日志” “支持可撤销操作” 命令模式的结构与实现 命令模式的结构 命令模式的结构与实现 命令模式的结构 命令模式包含以下4个角色: Command(抽象命令类) ConcreteCommand(具体命令类) Invoker(调用者) Receiver(接收者) 命令模式的结构与实现 命令模式的实现 命令模式的本质是对请求进行封装 一个请求对应于一个命令,将发出命令的 责任 安全质量包保责任状安全管理目标责任状8安全事故责任追究制幼儿园安全责任状占有损害赔偿请求权 和执行命令的责任分开 命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求如何被接收、操作是否被执行、何时被执行,以及是怎么被执行的 命令模式的结构与实现 命令模式的实现 典型的抽象命令类代码: abstract class Command { public abstract void Execute(); } 命令模式的结构与实现 命令模式的实现 典型的调用者(请求发送者)类代码: class Invoker { private Command command; //构造注入 public Invoker(Command command) { this.command=command; } public Command Command { get { return command; } //设值注入 set { command = value; } } //业务方法,用于调用命令类的方法 public void Call() { command.Execute(); } } 命令模式的结构与实现 命令模式的实现 典型的具体命令类代码: class ConcreteCommand : Command { private Receiver receiver; //维持一个对请求接收者对象的引用 public override void Execute() { receiver.Action();//调用请求接收者的业务处理方法Action() } } 命令模式的结构与实现 命令模式的实现 典型的请求接收者类代码: class Receiver { public void Action() { //具体操作 } } 命令模式的应用实例 实例说明 为了用户使用方便,某系统提供了一系列功能键,用户可以自定义功能键的功能,例如功能键FunctionButton可以用于退出系统(由SystemExitClass类来实现),也可以用于显示帮助文档(由DisplayHelpClass类来实现)。 用户可以通过修改配置文件来改变功能键的用途,现使用命令模式来设计该系统,使得功能键类与功能类之间解耦,可为同一个功能键设置不同的功能。 命令模式的应用实例 实例类图 功能键设置结构图 命令模式的应用实例 实例代码 (1) FunctionButton:功能键类,充当请求调用者(请求发送者) (2) Command:抽象命令类 (3) ExitCommand:退出命令类,充当具体命令类 (4) HelpCommand:帮助命令类,充当具体命令类 (5) SystemExitClass:退出系统模拟实现类,充当请求接收者 (6) DisplayHelpClass:显示帮助文档模拟实现类,充当请求接收者 (7) 配置文件App.config (8) Program:客户端测试类 参考代码 (DesignPattern\CommandSample) 命令模式的应用实例 结果及分析 如果需要更换具体命令类,无须修改源代码,只需修改配置文件,完全符合开闭原则 每一个具体命令类对应一个请求的处理者(接收者),通过向请求发送者注入不同的具体命令对象可以使相同的发送者对应不同的接收者,从而实现“将一个请求封装为一个对象,用不同的请求对客户进行参数化”,客户端只需要将具体命令对象作为参数注入请求发送者,无须直接操作请求的接收者 实现命令队列 动机 当一个请求发送者发送一个请求时,有不止一个请求接收者产生响应,这些请求接收者将逐个执行业务方法,完成对请求的处理 增加一个CommandQueue类,由该类负责存储多个命令对象,而不同的命令对象可以对应不同的请求接收者 批处理 实现命令队列 实现 using System.Collections.Generic; namespace CommandSample { class CommandQueue { //定义一个List来存储命令队列 private List commands = new 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(); } } } } 记录请求日志 动机 将请求的历史记录保存下来,通常以日志文件(Log File)的形式永久存储在计算机中 为系统提供一种恢复机制 可以用于实现批处理 防止因为断电或者系统重启等原因造成请求丢失,而且可以避免重新发送全部请求时造成某些命令的重复执行 记录请求日志 实现 将发送请求的命令对象通过序列化写到日志文件中 命令类必须使用属性[Serializable]标记为可序列化 命令对象 日志文件 序列化 实现撤销操作 实例 可以通过对命令类进行修改使得系统支持撤销(Undo)操作和恢复(Redo)操作 设计一个简易计算器,该计算器可以实现简单的数学运算,还可以对运算实施撤销操作。 实现撤销操作 结构 简易计算器结构图 实现撤销操作 实现 加法类:Adder(请求接收者) 抽象命令类:AbstractCommand 加法命令类:AddCommand(具体命令类) 计算器界面类:CalculatorForm(请求发送者) 客户端测试类:Program 参考代码 (DesignPattern\CommandUndoSample) 宏命令 动机 宏命令(Macro Command)又称为组合命令(Composite Command),它是组合模式和命令模式联用的产物 宏命令是一个具体命令类,它拥有一个集合,在该集合中包含了对其他命令对象的引用 当调用宏命令的Execute()方法时,将递归调用它所包含的每个成员命令的Execute()方法。一个宏命令的成员可以是简单命令,还可以继续是宏命令 执行一个宏命令将触发多个具体命令的执行,从而实现对命令的批处理 宏命令 结构 命令模式的优缺点与适用环境 模式优点 降低了系统的耦合度 新的命令可以很容易地加入到系统中,符合开闭原则 可以比较容易地设计一个命令队列或宏命令(组合命令) 为请求的撤销(Undo)和恢复(Redo)操作提供了一种设计和实现 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 命令模式的优缺点与适用环境 模式缺点 使用命令模式可能会导致某些系统有过多的具体命令类(针对每一个对请求接收者的调用操作都需要设计一个具体命令类) 命令模式的优缺点与适用环境 模式适用环境 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互 系统需要在不同的时间指定请求、将请求排队和执行请求 系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作 系统需要将一组操作组合在一起形成宏命令 END
本文档为【17C设计模式-命令模式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_682974
暂无简介~
格式:ppt
大小:2MB
软件:PowerPoint
页数:0
分类:
上传时间:2017-06-07
浏览量:45