命令(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)模式的更多相关文章

  1. 设计模式C++描述----19.命令(Command)模式

    一. 举例说明 我们知道,在多线程程序中,多个用户都给系统发 Read 和 Write 命令.这里有几点需要说明: 1. 首先明确一点,所有的这些 Read 和 Write 命令都是调用一个库函数. ...

  2. 命令(Command)模式

    命令模式又称为行动(Action)模式或者交易(Transaction)模式. 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可 ...

  3. 十五、命令(Command)模式--行为型模式(Behavioral Pattern)

    命令模式又称为行动(Action)模 式或交易(Transaction)模式.命令模式把一个请求或者操作封装到一个对象中. 命令模式是对命令的封装.命令模式把发出命令的责任和执行命令的责任分割开,委派 ...

  4. python 设计模式之命令(Command)模式

    #写在前面 也了解了不少设计模式了,他们都有一个通病,那就是喜欢把简单的东西复杂化.比如在不同的类中加个第三者.哈哈哈,简单变复杂是有目的的,那就是降低耦合度,增强可维护性,提高代码复用性,使代码变得 ...

  5. junit设计模式--命令者模式

    命令模式的意图 将一个请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化: 对请求排队或记录请求日志,以及支持可撤销的操作: 命令模式告诉我们可以为一个操作生成一个对象并给出它的一个执行方法 ...

  6. Java设计模式(22)命令模式(Command模式)

    Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...

  7. Command模式

    Command模式只是封装了一个没有任何变量的函数. interface Command{ void Excute();} 具有强烈的分解功能的味道.把函数层面的任务提升到了类的层面(一个类仅仅是为了 ...

  8. 敏捷软件开发(3)---COMMAND 模式 & Active Object 模式

    COMMAND 模式 command模式非常简单,简单到你无法想象的地方. public interface Command { void execute(); } 这就是一个command模式的样子 ...

  9. [转载] ubuntu开机直接进入命令行模式

    最近安装了ubuntu12.04来使用,每次都进入unity界面再进入命令行很不方便. 不需要界面的话,可以通过设置来开机进入命令行模式. 今天提供两中比较好的方法.经本人测试两中方法都可使用. [1 ...

  10. 开发设计模式(一)Command模式

    Command定义 将来自客户端的请求传入一个对象,无需了解这个请求激活的 动作或有关接受这个请求的处理细节. 这是一种两台机器之间通讯联系性质的模式,类似传统过程语 言的 CallBack功能. 优 ...

随机推荐

  1. zabbix监控的配置

    ZABBIX监控的操作步骤有两个! 首先登录到zabbix 的主界面在configuration---host---create host在如上的host 创建界面中 主要是输入被监测的server的 ...

  2. RAC 11gR2模拟OCR和Votedisk损坏恢复过程

    1)破坏前的ocr和votedisk信息检查 检查ocr自动备份 [root@rac1 ~]# ocrconfig -showbackup rac2 2013/10/13 09:45:30 /u01/ ...

  3. profile MySQL性能分析工具

    分析SQL执行带来的开销是优化SQL的重要手段.在MySQL数据库中,可以通过配置profiling参数来启用SQL剖析.该参数可以在全局和session级别来设置.对于全局级别则作用于整个MySQL ...

  4. PTA 说反话-加强版(20 分)(字符串处理)

    说反话-加强版(20 分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串.字符串由若干单词和若干空 ...

  5. AngularJS:表格

    ylbtech-AngularJS:表格 1.返回顶部 1. AngularJS 表格 ng-repeat 指令可以完美的显示表格. 在表格中显示数据 使用 angular 显示表格是非常简单的: A ...

  6. 关于 NULL的坑

    有如下的表: select * from testtable where name in ('name'):  结果是第一条: select * from testtable where name n ...

  7. linux平台总线驱动设备模型之点亮LED

    这一节里,我们来使用平台驱动设备这一套架构来实现我们之前使用简单的字符设备驱动点亮LED,这里并无实际意义,只是告诉大家如果编写平台总线驱动设备. 问:如何编写平台总线驱动设备这一套架构的设备驱动? ...

  8. mysql索引原理与慢查询优化2

    七 正确使用索引 一 索引未命中 并不是说我们创建了索引就一定会加快查询速度,若想利用索引达到预想的提高查询速度的效果,我们在添加索引时,必须遵循以下问题 1 范围问题,或者说条件不明确,条件中出现这 ...

  9. 第一章 Spring整体架构和环境搭建(待续)

    ········

  10. Document.location.href和.replace的区别

    转自:https://www.cnblogs.com/GT_Andy/archive/2007/10/31/1922138.html 1 Document.location.href和.replace ...