关闭

设计模式_命令模式

标签: 命令模式设计模式c++完整可运行代码新手
199人阅读 评论(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;        
}

执行结果:


1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

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

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

Java设计模式之命令模式

继续23种设计模式系列,本文介绍命令模式。
  • jason0539
  • jason0539
  • 2015-04-19 08:31
  • 20995

浅谈JAVA设计模式之——命令模式(Command)

一、概述 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 二、适用性 1.抽象出待执行的动作以参数化某对象。 2.在不同的时刻指...
  • l1028386804
  • l1028386804
  • 2015-05-08 00:22
  • 3872

设计模式讲解-命令

  • 2017-03-07 09:16
  • 39KB
  • 下载

命令设计模式示例

  • 2015-12-28 15:06
  • 9KB
  • 下载

设计模式之(命令+责任链)

  • 2016-08-03 16:57
  • 9KB
  • 下载

设计模式讲解与代码实践(十五)——命令

本文讲解了命令(Command)设计模式的使用目的、基本形态及各参与者,并结合示例代码,讲解了该设计模式在具体业务场景下的使用。
  • free1985
  • free1985
  • 2017-08-01 17:37
  • 1950

设计模式:Command(命令)

Command定义       将来自客户端的请求传入一个对象,无需了解这个请求激活的 动作或有关接受这个请求的处理细节。       这是一种两台机器之间通讯联系性质的模式,类似传统过程语 言的 C...
  • silentwolfyh
  • silentwolfyh
  • 2016-10-17 16:09
  • 574

8.2.2 命令设计模式

8.2.2 命令设计模式       命令模式描述了一种在应用程序中表示动作的方法。相对于前一个的模式,它常把已知的行为(比如,列表的筛选)和缺少的部分(谓词)参数化,而命令模式经常存储一些“工作...
  • hadstj
  • hadstj
  • 2011-06-22 14:36
  • 464

《GOF设计模式》—命令(COMMAND)—Delphi源码示例:支持取消和重做(多次取消2)

示例:多次取消2 说明: 有时可能不得不将一个可撤消的命令在它可以被放入历史列表中之前先拷贝下来。这是因为执行原来的请求的命令对象将在稍后执行其他的请求。如果命令的状态在各次调用之间...
  • starsky2006
  • starsky2006
  • 2011-01-13 10:18
  • 350
    个人资料
    • 访问:10119次
    • 积分:441
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:3篇
    • 译文:0篇
    • 评论:6条
    最新评论