命令(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功能. 优 ...
随机推荐
- android Shape使用(转)
在Android中常常会使用shape来定义控件的一些显示属性,那么怎么来用那,今天我们就来看一些shape的使用,大家看完这篇以后就会对shape有了大体的了解,下面的是稍作总结请大家仔细的观看: ...
- mongodb配置和基本操作
MongoDB3.0新特性WiredTigerMMAPv1可插拔引擎API基于web的可视化管理工具 查看版本号mongod --version启动数据库 mongod --dbpath $dbpat ...
- 【LigerUI实战】Grid弹出编辑popup
最近为分公司的项目做外援,做起了全栈的活.被公司自研架构磨灭的几乎忘掉了其他技能,正好新项目决定重新搭个架构,与同事们讨论过后,决定Spring+MyBatis+SpringMVC+CXF+Liger ...
- linux 定时脚本任务的创建
参考资料https://my.oschina.net/xsh1208/blog/512810 定时脚本任务创建过程 1. 启动/终止 crontab 服务 一般使用这个命令/sbin/service ...
- SpringMVC 接收表单数据的方式
1.@RequestParam @RequestMapping(value = "/xxxx.do") public void create(@RequestParam(value ...
- 【知识结构】最强Web认证知识体系
花了些时间总结了下Web认证,以及各种方式的利弊和使用,后续后继续更新.文章转载请注明出处:https://www.cnblogs.com/pengdai/p/9144843.html -----20 ...
- pl/sql基础语法
- [转] const T、const T*、T *const、const T&、const T*& 的区别
这里的T指的是一种数据类型,可以是int.long.doule等基本数据类型,也可以是自己类型的类型class.单独的一个const你肯定知道指的是一个常量,但const与其他类型联合起来的众多变化, ...
- inux php pdo mysql 扩展
今天在本机部署了一个pdo项目,发现一些问题,真没想到pdo mysql,不容易装啊,哈哈,我说的不容易,是因为php5.3以前版本,yum源里面根本没有.部署后就报,Undefined class ...
- 执行CUnit测试出错
est/test_fifo.test: error while loading shared libraries: libcunit.so.1: cannot open shared object f ...