设计模式_命令模式

来源:互联网 发布:手机移动协同软件 编辑:程序博客网 时间:2024/05/16 18:08
命令模式:

  将一个请求封装为一个对象(即我们创建的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();    }};#endifint main(){    Computer* cp = new Computer();    DrawCircleCommand * circleCMD = new DrawCircleCommand(cp);    circleCMD->execute();    DrawRectangleCommand * rectangleCMD = new DrawRectangleCommand(cp);    rectangleCMD->execute();    return 0;        }

执行结果:


原创粉丝点击