读书笔记18:命令模式
来源:互联网 发布:知乎日报离线下载api 编辑:程序博客网 时间:2024/05/21 18:33
1、定义:
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。[GOF 《设计模式》]
2、角色
Command——用来执行操作的接口。
CreateCommand——将一个接收者对象绑定一个动作,并实现执行命令操作。
Invoker——要求该命令执行。
Receiver——知道如何实施与执行一个与请求相关的操作,任何类都可作为一个接收者。
3、模型
Command
abstract class Command { protected Receiver receiver; public Command(Receiver creceiver) { this.receiver = creceiver; } abstract public void Execute(); }
CreateCommand
class CreateCommand : Command { public CreateCommand(Receiver receiver) : base(receiver) { } public override void Execute() { receiver.Action(); } }
Receiver
class Receiver { public void Action() { Console.WriteLine("执行命令"); } }
Invoker
class Invoker { private Command command; public void SetCommand(Command command) { this.command = command; } public void ExecuteCommand() { command.Execute(); } }
调用
static void Main(string[] args) { Receiver receiver = new Receiver(); Command command = new CreateCommand(receiver); Invoker invoker = new Invoker(); invoker.SetCommand(command); invoker.ExecuteCommand(); Console.ReadLine(); }
结果:
命令模式模型代码:http://download.csdn.net/detail/yysyangyangyangshan/4089536
命令模式,很多个Receiver,并与之对应Command也有很多个,Invoker则负责将Receiver和Command关联,并执行。
应用模型:
abstract class Command1 { protected Receiver1 receiver1; public Command1(Receiver1 creceiver1) { this.receiver1 = creceiver1; } abstract public void Execute(); } abstract class Command2 { protected Receiver2 receiver2; public Command2(Receiver2 creceiver2) { this.receiver2 = creceiver2; } abstract public void Execute(); } class CreateCommand1 : Command1 { public CreateCommand1(Receiver1 receiver1) : base(receiver1) { } public override void Execute() { receiver1.Action(); } } class CreateCommand2 : Command2 { public CreateCommand2(Receiver2 receiver2) : base(receiver2) { } public override void Execute() { receiver2.Action(); } } class Invoker { private Command1 command1; private Command2 command2; public void SetCommand1(Command1 command) { this.command1 = command; } public void ExecuteCommand1() { command1.Execute(); } public void SetCommand2(Command2 command) { this.command2 = command; } public void ExecuteCommand2() { command2.Execute(); } } class Receiver1 { public void Action() { Console.WriteLine("执行命令一"); } } class Receiver2 { public void Action() { Console.WriteLine("执行命令二"); } }
调用
static void Main(string[] args) { Receiver1 receiver1 = new Receiver1(); Receiver2 receiver2 = new Receiver2(); Command1 command1 = new CreateCommand1(receiver1); Command2 command2 = new CreateCommand2(receiver2); Invoker invoker = new Invoker(); invoker.SetCommand1(command1); invoker.ExecuteCommand1(); invoker.SetCommand2(command2); invoker.ExecuteCommand2(); Console.ReadLine(); }
结果:
应用代码:http://download.csdn.net/detail/yysyangyangyangshan/4089547
- 读书笔记18:命令模式
- 读书笔记18:命令模式
- 设计模式读书笔记-----命令模式
- 设计模式读书笔记-----命令模式
- 设计模式读书笔记-----命令模式
- 设计模式读书笔记-----命令模式
- 大话设计模式读书笔记之命令模式
- 设计模式读书笔记:Command(命令)
- Head First设计模式 读书笔记-单件模式、命令模式
- 设计模式读书笔记之命令模式(Command Pattern)
- 【读书笔记】HeadFirst设计模式——命令模式简述
- 命令模式(heade first设计模式读书笔记)
- 设计模式读书笔记之命令模式(Command Pattern)
- 《HeadFirst设计模式》读书笔记-第6章-命令模式
- HeadFirst设计模式_读书笔记_005_命令模式
- 《大话设计模式》读书笔记之C++实现--chapter23命令模式
- 《大话设计模式》读书笔记之C++实现--chapter24命令模式
- 第二十三章烤羊肉串引来的思考--命令模式(读书笔记)
- Linux下字符串的替换
- js 效果
- 做图像研究群体
- linux命令的一些补充
- 函数的调用约定
- 读书笔记18:命令模式
- C#的web开发,窗体的打开和关闭几种语句
- 搞IT的达人们是不是都会用PPT?
- 2011研究生这半年
- Java数据库操作时一点常见的错误
- CString中GetBuffer函数的应用
- I/O stream
- IBUS输入法安装和设置
- 黑马程序员__网络编程