设计模式_命令模式

标签: 命令模式 设计模式 c++ 完整可运行代码 新手
226人阅读 评论(0) 收藏 举报
分类:
命令模式:

  将一个请求封装为一个对象(即我们创建的Command对象),从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。

 解决的问题:

  在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。


类图:

实例:

请求计算机画出不同的图形.

将计算机当作命令的接收者,将画图形的请求封装成命令.

发出不同的命令即可让计算机画出不同的图形.


完整可执行的代码:

#ifndef _COMMAND_H_
#define _COMMAND_H_
#include<iostream>
using namespace std;

//命令接收者
class Computer
{
public:
    void drawCircle()
    {
        cout << "draw Circle" << endl;
    }
    void drawRectangle()
    {
        cout << "draw Rectangle" << endl;
    }
};

//抽象的命令类
class XCommand
{
public:
    XCommand( Computer* cp ):computer(cp) {}
    virtual void execute() = 0;
protected:
    Computer * computer;
};

//画圆形的命令
class DrawCircleCommand : public XCommand
{
public:
    DrawCircleCommand( Computer* cp ):XCommand(cp) {}
    void execute() override
    {
        computer->drawCircle();
    }
};

//画矩形的命令
class DrawRectangleCommand: public XCommand
{
public:
    DrawRectangleCommand(Computer* cp ):XCommand(cp) {}
    void execute() override
    {
        computer->drawRectangle();
    }
};
#endif

int main()
{
    Computer* cp = new Computer();
    DrawCircleCommand * circleCMD = new DrawCircleCommand(cp);
    circleCMD->execute();

    DrawRectangleCommand * rectangleCMD = new DrawRectangleCommand(cp);
    rectangleCMD->execute();
    return 0;        
}

执行结果:


查看评论

设计模式 —— 命令模式(Command Pattern)

命令模式(Command Pattern)概念: 概述:在软件设计中,我们经常会遇到某些对象发送请求,然后某些对象接受请求后执行,但发送请求的对象可能并不知道接受请求的对象是谁,执行的是什么动作。...
  • wwh578867817
  • wwh578867817
  • 2016-05-29 18:34:53
  • 2522

设计模式之命令模式---Command Pattern

模式的定义命令模式是一个高内聚的模式,定义如下:Encapsulate a request as an object,thereby letting you parameterize clients ...
  • hfreeman2008
  • hfreeman2008
  • 2016-08-06 10:37:34
  • 2139

Java开发中的23种设计模式详解----命令模式(Command)

命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。这个过程好在,三者相互解耦,任何一方都不用去依赖其...
  • sjyttkl
  • sjyttkl
  • 2017-06-21 12:23:41
  • 1584

设计模式C++实现——命令模式

模式定义:         命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。         命令对象将动作和接受者包进对象中,这个对象只暴...
  • walkerkalr
  • walkerkalr
  • 2014-06-10 16:14:33
  • 1000

设计模式(行为型)之命令模式(Command Pattern)

在软件开发中,我们经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,我们特别希望能够以一种松耦合的方式来设计软件,使得请求发送者与...
  • yanbober
  • yanbober
  • 2015-05-05 11:49:27
  • 3323

深入浅出设计模式之命令模式、适配器模式、外观模式

命令模式
  • u011531613
  • u011531613
  • 2017-03-22 20:42:45
  • 602

设计模式十五(命令模式,python语言实现)

基本原理请参考相应书籍,这里直接给实例     被控对象是机器人Robot,人(Client),通过控制器(controller)编程,给机器人发送指令。 Comand是指令的父类,具体指令有...
  • hitzjm
  • hitzjm
  • 2012-12-13 09:16:38
  • 1442

大话设计模式—命令模式

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该...
  • lmb55
  • lmb55
  • 2016-04-03 20:18:28
  • 1481

游戏开发设计模式之命令模式(unity3d 示例实现)

博主才学尚浅,难免会有错误,尤其是设计模式这种极富禅意且需要大量经验的东西,如果哪里书写错误或有遗漏,还请各位前辈指正。 打算写设计模式的目的就是,首先自己可以理清思路,还有就是国内的设计模式资料很...
  • wolf96
  • wolf96
  • 2015-10-11 10:22:05
  • 3951

【C#设计模式-命令模式】

一.定义: 命令模式是将一类对象的功能操作进行抽象,一般来说,这些对象有相同的方法,所以这类对象有着类似的操作,我们通过抽象,就可以定义出一个命令对象,通过这样的方式,用户程序在使用的时候,只与该命令...
  • heyangyi_19940703
  • heyangyi_19940703
  • 2016-05-04 15:06:23
  • 1035
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 498
    排名: 10万+
    最新评论