命令(Command)模式
命令(Command)模式:命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象
/*
* 客户(Client)角色:创建了一个具体命令(ConcreteCommand)对象并确定其接收者。
* 命令(Command)角色:声明了一个给所有具体命令类的抽象接口。这是一个抽象角色。
* 具体命令(ConcreteCommand)角色:定义一个接受者和行为之间的弱耦合;实现Execute()方法,负责调用接收考的相应操作。Execute()方法通常叫做执方法。
* 请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。
* 接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。
*/
命令(Command) 需要交给 接收者(Receiver) 来执行, 因此在构造命令的时候需要知道 谁是接受者
protected Receiver receiver;
// 构造函数
public Command(Receiver receiver)
{
this.receiver = receiver;
}
请求者(Invoker) 发送 具体命令(ConcreteCommand)给接受者 因此在请求者 中需要有 命令角色Command
具体命令(ConcreteCommand)的构造函数中需要知道 接受者 是谁
// 构造函数
public ConcreteCommand(Receiver receiver) : base(receiver) { }
// 创建接收命令,调用程序
Receiver r = new Receiver();
Command c = new ConcreteCommand(r);//为某一命令指定接收者
Invoker i = new Invoker();
// 设置和执行命令
i.SetCommand(c); //请求者发送命令。 命
i.ExecuteCommand(); //请求者发送命令后的执行命令结果
static void Main(string[] args)
{
// 创建接收命令,调用程序
Receiver r = new Receiver();
Command c = new ConcreteCommand(r);
Invoker i = new Invoker(); // 设置和执行命令
i.SetCommand(c);
i.ExecuteCommand(); Console.ReadLine();
} /// <summary>
/// 命令(Command)角色
/// </summary>
public abstract class Command
{
protected Receiver receiver;
// 构造函数
public Command(Receiver receiver)
{
this.receiver = receiver;
}
public abstract void Execute();
} // 具体命令(ConcreteCommand)角色
public class ConcreteCommand : Command
{
// 构造函数
public ConcreteCommand(Receiver receiver) : base(receiver) { } // Methods
public override void Execute()
{
receiver.Action();
}
}
// 接收者(Receiver)角色
public class Receiver
{
public void Action()
{
Console.WriteLine("接收者(Receiver)Action()");
}
} // 请求者(Invoker)角色
public class Invoker
{
private Command command;
// Methods
public void SetCommand(Command command)
{
this.command = command;
}
public void ExecuteCommand()
{
command.Execute();
}
}
命令(Command)模式的更多相关文章
- 设计模式C++描述----19.命令(Command)模式
一. 举例说明 我们知道,在多线程程序中,多个用户都给系统发 Read 和 Write 命令.这里有几点需要说明: 1. 首先明确一点,所有的这些 Read 和 Write 命令都是调用一个库函数. ...
- 命令(Command)模式
命令模式又称为行动(Action)模式或者交易(Transaction)模式. 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可 ...
- 十五、命令(Command)模式--行为型模式(Behavioral Pattern)
命令模式又称为行动(Action)模 式或交易(Transaction)模式.命令模式把一个请求或者操作封装到一个对象中. 命令模式是对命令的封装.命令模式把发出命令的责任和执行命令的责任分割开,委派 ...
- python 设计模式之命令(Command)模式
#写在前面 也了解了不少设计模式了,他们都有一个通病,那就是喜欢把简单的东西复杂化.比如在不同的类中加个第三者.哈哈哈,简单变复杂是有目的的,那就是降低耦合度,增强可维护性,提高代码复用性,使代码变得 ...
- junit设计模式--命令者模式
命令模式的意图 将一个请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化: 对请求排队或记录请求日志,以及支持可撤销的操作: 命令模式告诉我们可以为一个操作生成一个对象并给出它的一个执行方法 ...
- Java设计模式(22)命令模式(Command模式)
Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...
- Command模式
Command模式只是封装了一个没有任何变量的函数. interface Command{ void Excute();} 具有强烈的分解功能的味道.把函数层面的任务提升到了类的层面(一个类仅仅是为了 ...
- 敏捷软件开发(3)---COMMAND 模式 & Active Object 模式
COMMAND 模式 command模式非常简单,简单到你无法想象的地方. public interface Command { void execute(); } 这就是一个command模式的样子 ...
- [转载] ubuntu开机直接进入命令行模式
最近安装了ubuntu12.04来使用,每次都进入unity界面再进入命令行很不方便. 不需要界面的话,可以通过设置来开机进入命令行模式. 今天提供两中比较好的方法.经本人测试两中方法都可使用. [1 ...
- 开发设计模式(一)Command模式
Command定义 将来自客户端的请求传入一个对象,无需了解这个请求激活的 动作或有关接受这个请求的处理细节. 这是一种两台机器之间通讯联系性质的模式,类似传统过程语 言的 CallBack功能. 优 ...
随机推荐
- TStrings的一些技巧(转)
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的.常规的用法大家都知道,现在来讨论它的一些高级的用法.先把要讨论的几个属性列出来:1.CommaText2.Delimiter ...
- Array数组(PHP学习)
什么是数组? 答:就是一组数. 数组的创建: <?php $Arr = array('姓名'=>'张三','身高'=>'174','家乡'=>'上海'); print_r($A ...
- 【转】 Pro Android学习笔记(九四):AsyncTask(3):ProgressDialog
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Progress Dialog小例子 我们 ...
- Sql Server优化之路
本文只限coder级别层次上对Sql Server的优化处理简结,为防止专业DB人士有恶心.反胃等现象,请提前关闭此页面. 首先得有一个测试库,使用数据生成计划生成测试数据库(参考:http://de ...
- mysql索引原理与慢查询优化2
七 正确使用索引 一 索引未命中 并不是说我们创建了索引就一定会加快查询速度,若想利用索引达到预想的提高查询速度的效果,我们在添加索引时,必须遵循以下问题 1 范围问题,或者说条件不明确,条件中出现这 ...
- Centos7 SSH公钥生成及配置
1.你可以按如下命令来生成 sshkey: ssh-keygen -t rsa -C "xxxxx@xxxxx.com" 2.按照提示完成三次回车,即可生成 ssh key.通过查 ...
- ghld
- Jquery改变td内容为1的颜色
Jquery改变td内容为1的颜色<table id="tb" > <tr> <td val="1">1</td> ...
- 在C#中动态调用webService
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- 【HDU4970】Killing Monsters
题意 数轴上有n个点,有m座炮塔,每个炮塔有一个攻击范围和伤害,有k个怪物,给出他们的初始位置和血量,问最后有多少怪物能活着到达n点.n<=100000 分析 对于某个怪物,什么情况下它可以活着 ...