`

[行为型模式]命令模式的理解

 
阅读更多



头文件
//CommandPattern.h

#ifndef COMMAND_PATTERN_H
#define COMMAND_PATTERN_H

#include <Windows.h>
#include <string>
using namespace std;


namespace CommandPattern
{

class Receiver
{
public:
    void Action();
};

class AbstructCommand
{
public:
    virtual ~AbstructCommand();
    virtual void Execute() = 0;
};

class ConcretetCommand : public AbstructCommand
{
public:
    ConcretetCommand(Receiver* pReciver);
    virtual ~ConcretetCommand();
    virtual void Execute();

private:
    Receiver* m_pReciver;
};


class Invoker
{
public:
    Invoker(AbstructCommand* pCommand);

    void Order();

private:
    AbstructCommand* m_pCommand;
};

//////////////////////////////////////////////////////////////////////////
void CommandPattern_Test();
}

#endif

实现
#include "CommandPattern.h"
#include <iostream>
using namespace std;

#define SAFE_DELETE(p) if (p) { delete p; p = NULL; }

namespace CommandPattern
{
    //////////////////////////////////////////////////////////////////////////
     void Receiver::Action()
     {
         cout << "Receiver->Action" << endl;
     }

     //////////////////////////////////////////////////////////////////////////
     AbstructCommand::~AbstructCommand()
     {

     }

    //////////////////////////////////////////////////////////////////////////
    ConcretetCommand::ConcretetCommand(Receiver* pReciver)
        : m_pReciver(NULL)
    {
        if (m_pReciver==NULL && pReciver!=NULL)
        {
            m_pReciver = pReciver;
        }
    }
     
    ConcretetCommand::~ConcretetCommand()
    {

    }

    void ConcretetCommand::Execute()
    {
        if (m_pReciver != NULL)
        {
            cout << "ConcretetCommand->Execute" << endl;
            m_pReciver->Action();
        }
    }

    //////////////////////////////////////////////////////////////////////////
    Invoker::Invoker(AbstructCommand* pCommand)
        : m_pCommand(NULL)
    {
        if (m_pCommand==NULL && pCommand!=NULL)
        {
            m_pCommand = pCommand;
        }
    }

    void Invoker::Order()
    {
        cout << "Invoker->Order" << endl;
        m_pCommand->Execute();
    }


    void CommandPattern_Test()
    {
        Receiver* pReceiver = new Receiver();
        ConcretetCommand* pConcreteCmd = new ConcretetCommand(pReceiver);
        Invoker* pInvoker= new Invoker(pConcreteCmd);

        pInvoker->Order();

        SAFE_DELETE(pReceiver);
        SAFE_DELETE(pConcreteCmd);
        SAFE_DELETE(pInvoker);
    }
}

客户端
#include "CommandPattern.h"


#include <iostream>
using namespace std;
using namespace CommandPattern;
void main()
{
    CommandPattern_Test();
}

运行结果
Invoker->Order
ConcretetCommand->Execute
Receiver->Action


分享到:
评论

相关推荐

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    2. **命令模式**:将请求封装为对象,使得可以使用不同的请求对客户端进行参数化,支持请求的队列处理和撤销操作。 3. **责任链模式**:在对象链中传递请求,由链上的对象决定是否处理该请求,使得系统可以在不影响...

    (行为型模式) Command 命令模式

    ### (行为型模式) Command 命令模式 #### 概述 在软件工程领域,设计模式被广泛地应用于解决常见的编程难题。其中,“Command”(命令)模式是一种行为型设计模式,它允许将请求封装成对象,从而使你能够用不同的...

    设计模式3-行为型模式

    **Chain of Responsibility(职责链)模式**是一种行为模式,它的主要动机是减少请求发送者与接收者之间的耦合。在软件开发中,有时一个请求可能由多个对象处理,但最终只有一个对象会真正处理这个请求。职责链模式...

    基于Python的行为型模式设计.pdf

    在行为型模式中,有多种模式可以通过Python轻松实现,例如:观察者模式、命令模式、策略模式、状态模式等。通过使用Python的类和继承机制,我们可以创建出行为型模式的框架结构,并且借助Python的动态类型系统和动态...

    设计模式之命令模式(Command)

    命令模式是一种行为设计模式,它的主要目的是将请求者与接收者解耦,使得请求的发起者无需知道哪个对象会执行这个请求,同时也让系统更容易扩展。这种模式在软件工程中广泛应用,特别是在事件驱动和分布式系统中。 ...

    设计模式之行为型模式代码.zip

    在软件工程中,设计模式是解决常见编程问题的可重用解决方案。行为型设计模式主要关注对象...在"设计模式之行为型模式代码"这个压缩包中,你将找到这些模式的示例代码,通过学习和实践,可以更好地理解和运用这些模式。

    设计模式-命令模式

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在iOS开发中,命令模式尤其适用于处理事件驱动的编程场景,因为...

    记事本 使用了策略模式和命令模式

    通过分析和学习这些代码,我们可以更深入地理解策略模式和命令模式在实际项目中的应用,同时也能提升自己的编程技巧和设计思维。 总的来说,策略模式和命令模式在记事本软件中的应用展示了设计模式在提高代码质量、...

    设计模式3-行为型模式.doc

    在上述内容中,提到了七种行为型设计模式,分别是责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式。 1. **责任链模式**:责任链模式的核心是建立一个对象链,每个对象都有处理请求的能力,...

    JAVA设计模式之行为模式

    这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...

    基于Python的行为型模式设计.zip

    3. **命令模式**:命令模式将请求封装为一个对象,使得可以使用不同的请求、队列请求、或者支持撤销操作。Python中,你可以通过定义命令类和调用者类来实现此模式。 4. **迭代器模式**:迭代器模式提供了一种方法来...

    实验5:行为型模式应用实验(2)

    首先,我们要了解行为型模式分为两大类:责任链模式、解释器模式、迭代器模式、命令模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式以及访问者模式。这些模式各有特点,解决不同的设计问题。 例如...

    Java学习资料-行为型设计模式

    这里我们将深入探讨两种行为型设计模式:责任链模式(Chain of Responsibility)和命令模式(Command Pattern)。 首先,责任链模式是一种结构型设计模式,其核心思想是将多个处理者组织成一个链条,每个处理者都有...

    软件设计模式2021秋-实验3-行为型模式实验报告附源码和类图.zip

    在本实验中,我们主要探讨了四种行为型设计模式:组合命令模式、中介者模式、观察者模式和状态模式。这些模式是软件工程中极为重要的设计原则,它们可以帮助开发者更好地组织代码,提高代码的可读性、可维护性和可...

    设计模式_行为模式

    以上十种行为模式是设计模式中最为经典和实用的部分,理解并熟练应用它们,可以极大地提升代码的可读性、可维护性和可扩展性。在实际开发中,可以根据具体需求灵活选择和组合这些模式,以实现高效、优雅的软件设计。

    23种设计模式-行为型模式.docx

    在给定的文档中,提到了23种设计模式中的几种行为型模式,包括责任链模式、迭代器模式、中介者模式、命令模式、解释器模式、访问者模式、策略模式、模板方法模式、状态模式、观察者模式以及备忘录模式。下面将对这些...

    设计模式之命令模式案例代码

    通过阅读这些代码,你可以更清楚地理解命令模式如何在实际项目中工作。例如,可能存在多个具体命令类,每个类对应接收者的一个特定操作。调用者根据需要设置不同的命令,然后执行这些命令。 命令模式的应用场景广泛...

Global site tag (gtag.js) - Google Analytics